映射文件的使用
來源:互聯網網民 2006-09-16 05:50:27
評論在WIN32種,通過使用映像文件在進程間實現共享文件或內存共享,如果利用相同的映像名字或文件句柄,則不同的進程可以通過一個指針來讀寫同一個文件或者同一內存數據塊,並把他們當成該進程內存空間的一部分。
內存映像文件可以映射一個文件、一個文件中的指定區域或者指定的內存塊,其中的數據就可以用內存讀取指令來直接訪問,而不用頻繁的使用操作文件的I/O系統函數,從而提高文件的存取速度和效率。
映像文件的另一個重要作用就是用來支持永久命名的共享內存。要在兩個應用程序之間共享內存,可以在一個應用程序中創建一個文件並映射,然後另外一個程序通過打開和映射此文件,並把它當作自己進程的內存來使用。事實上,此內存是所有進程共享的。
下面將先描述一下幾個操作內存的API函數
1、創建內存映射的API函數
This function creates a named or unnamed file-mapping object for the specified file.
HANDLE CreateFileMapping(
//通過調用fileopen or FileCreate後返回的文件句柄,如果是內存,則//$FFFFFFFF
HANDLE hFile,
//安全性結構,一般null
LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
//文件試圖的保護類型,PAGE_READONLY,PAGE_READWRITE,
DWORD flProtect,
//文件大小的高32位,一般設置爲0,除非文件大于4G
DWORD dwMaximumSizeHigh,
//文件大小低32位
DWORD dwMaximumSizeLow,
//映射的名字
LPCTSTR lpName
);
2、打開一個映射文件
HANDLE OpenFileMapping(
//訪問數據模式:FILE_MAP_ALL_ACCESS,FILE_MAP_COPY,FILE_MAP_READ, //FILE_MAP_WRITE
DWORD dwDesiredAccess,
//子進程是否可以繼承
BOOL bInheritHandle,
//映射文件名
LPCTSTR lpName
);
3、將映射文件映射到本進程的API函數
LPVOID MapViewOfFile(
//通過CreateFileMapping或OpenFileMapping返回的文件句柄
HANDLE hFileMappingObject,
//訪問的數據模式:FILE_MAP_WRITE,FILE_MAP_READ,FILE_MAP_ALL_ACCESS
DWORD dwDesiredAccess,
//指定數據在映射文件中起始位置的高32位
DWORD dwFileOffsetHigh,
//低32位
DWORD dwFileOffsetLow,
//需要映射的大小,0表示全部
DWORD dwNumberOfBytesToMap
);
4、關閉映射的api函數
BOOL UnmapViewOfFile(
//由MapViewofFile産生的映射文件的地址
LPCVOID lpBaseAddress
);
5、下面例子中還會用到的幾個api函數
創建互斥對象
HANDLE WINAPI CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCTSTR lpName
);
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
上文中曾經提到我們使用內存映射的方式來在多個程序或DLL中共享數據。下面就通過一個程序來介紹。
雖然我要描述的是再兩個應用程序之間共享數據,不過爲了省事,我將所有的內容都寫在一個程序中,你只需要把此程序打開兩次就可以了。一個程序用來建立內存映射文件,另外一個程序用來打開內存映射文件。並通過對公共內存的讀寫操作來演示信息共享。
程序的窗體單元代碼如下:
object Form1: TForm1
Left = 236
Top = 147
Width = 327
Height = 412
Caption = 'MyMapForm_1'
Color = clBtnFace
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = '宋體'
Font.Style = []
OldCreateOrder = False
OnClose = FormClose
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object GroupBox1: TGroupBox
Left = 0
Top = 0
Width = 319
Height = 121
Align = alTop
Caption = '共享內存的信息[發送]'
TabOrder = 0
object Label1: TLabel
Left = 16
Top = 24
Width = 26
Height = 13
Caption = '數據'
end
object Label2: TLabel
Left = 16
Top = 48
Width = 39
Height = 13
Caption = '修改者'
end
object Label3: TLabel
Left = 16
Top = 80
Width = 52
Height = 13
Caption = '修改時間'
end
object edData: TEdit
Left = 75
Top = 21
Width = 230
Height = 21
TabOrder = 0
end
object edModifyUser: TEdit
Left = 74
Top = 49
Width = 231
Height = 21
TabOrder = 1
end
object edModifyTime: TEdit
Left = 74
Top = 73
Width = 231
Height = 21
Enabled = False
TabOrder = 2
end
end
object Panel1: TPanel
Left = 0
Top = 242
Width = 319
Height = 121
Align = alClient
BevelOuter = bvNone
TabOrder = 1
object btnCreate: TButton
Left = 32
Top = 8
Width = 113
Height = 25
Caption = '新建內存映射'
TabOrder = 0
OnClick = btnCreateClick
end
object btnOpen: TButton
Left = 160
Top = 8
Width = 113
Height = 25
Caption = '打開已存在映射'
TabOrder = 1
OnClick = btnOpenClick
end
object btnRead: TButton
Left = 160
Top = 45
Width = 113
Height = 25
Caption = '讀取映射信息'
TabOrder = 2
OnClick = btnReadClick
end
object btnSet: TButton
Left = 32
Top = 45
Width = 113
Height = 25
Caption = '設置內存信息'
TabOrder = 3
OnClick = btnSetClick
end
object btnClose: TButton
Left = 32
Top = 85
Width = 113
Height = 25
Caption = '關閉映射'
TabOrder = 4
OnClick = btnCloseClick
end
object btnClear: TButton
Left = 160
Top = 85
Width = 113
Height = 25
Caption = '清空編輯狂'
TabOrder = 5
OnClick = btnClearClick
end
end
object StatusBar1: TStatusBar
Left = 0
Top = 363
Width = 319
Height = 19
Panels = <
item
Width = 200
end>
end
object GroupBox2: TGroupBox
Left = 0
Top = 121
Width = 319
Height = 121
Align = alTop
Caption = '共享內存的信息[接收]'
Enabled = False
TabOrder = 3
object Label4: TLabel
Left = 16
Top = 24
Width = 26
Height = 13
Caption = '數據'
end
object Label5: TLabel
Left = 16
Top = 48
Width = 39
Height = 13
Caption = '修改者'
end
object Label6: TLabel
Left = 16
Top = 80
Width = 52
Height = 13
Caption = '修改時間'
end
object edRData: TEdit
Left = 75
Top = 21
Width = 230
Height = 21
TabOrder = 0
end
object edRUser: TEdit
Left = 74
Top = 49
Width = 231
Height = 21
TabOrder = 1
end
object edRTime: TEdit
Left = 74
Top = 73
Width = 231
Height = 21
Enabled = False
TabOrder = 2
end
end
end
程序的代碼主要分爲兩部分,comm.pas單元中定義幾個對操作內存映射的函數,以及共享內存的結構信息。代碼如下:
...{
作者: wudi_1982
聯系方式: wudi_1982@hotmail.com
開發工具以及平台:DELPHI7+WINXP
轉載請注明出處
}
unit comm;
interface
uses
Windows,SysUtils;
const
FILEMAPPINGNAME = 'MyFileMapping'; // 指定內存映射的名字
MUTEXNAME= 'MutexName'; //互斥對象的名字
type
TShareMem = record //共享內存的結構信息
Data : array[0..255] of char; //描述共享數據信息
ModifyUser : array[0..255] of char; //對數據的修改者
ModifyTime : array[0..7] of char; //數據最近一次的修改時間
end;
PShareMem = ^TShareMem;
var
FileMapHandle : THandle; //建立映射的句柄
MutexHandle : THandle; // 互斥對象的句柄
ShareMem : PShareMem; //一個指向共享內存的指針
function OpenMap:THandle; //打開一個映射文件並映射到本進程中
function CreateMap:THandle; //新建一個映射文件並映射到本進程中
function LockMap:boolean; //加鎖
procedure UnLockMap; //解鎖
procedure CloseMap; //關閉映射
function ReadCommData:TShareMem; //從共享信息中讀取數據
procedure WriteCommData(data,user,time : string);//對共享內存進行寫操作
implementation
function OpenMap:THandle;
begin
//打開映射文件
FileMapHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, //所有權限
false, //子進程不可繼承
FILEMAPPINGNAME
);
if FileMapHandle <> 0 then //如果映射文件打開成功
begin
//將映射文件映射到本進程
ShareMem := pSharemem(MapViewOfFile(FileMapHandle,FILE_MAP_ALL_ACCESS,0,0,0));
if ShareMem = nil then
begin
CloseHandle(FileMapHandle);
Result := 0;
end else begin
//初始化共享區域
FillChar(ShareMem^,sizeof(TSharemem),0);
Result := FileMapHandle;
end;
end else Result := 0;
end;
function CreateMap:THandle;
begin
FileMapHandle := CreateFileMapping($FFFFFFFF,//內存映射
nil,
PAGE_READWRITE,//讀寫操作
0,//高32位 ,一般爲0,除非要映射的文件大于4G
sizeof(TShareMem),
FILEMAPPINGNAME
);
if FileMapHandle <> 0 then
begin
ShareMem := pSharemem(MapViewOfFile(FileMapHandle,FILE_MAP_ALL_ACCESS,0,0,0));
if ShareMem = nil then
begin
CloseHandle(FileMapHandle);
Result := 0;
end else Result := FileMapHandle;
end else Result := 0;
end;
function LockMap:boolean;
begin
//創建一個互斥對象並加鎖
MutexHandle := CreateMutex(nil,false,MUTEXNAME);
if MutexHandle <> 0 then
begin
if WaitForSingleObject(MutexHandle,1000)= WAIT_FAILED then Result := false
else Result := true;
end else Result := false;
end;
procedure UnLockMap;
begin
//釋放資源
if MutexHandle <> 0 then
begin
ReleaseMutex(MutexHandle);
CloseHandle(MutexHandle);
end;
end;
procedure CloseMap;
begin
// 關閉映射並釋放資源
if ShareMem <> nil then UnmapViewOfFile(ShareMem);
if FileMapHandle <> 0 then CloseHandle(FileMapHandle);
end;
function ReadCommData:TShareMem;
var
tm : TShareMem;
begin
with tm do
begin
Data := ShareMem^.Data;
ModifyUser := ShareMem^.ModifyUser;
ModifyTime := ShareMem^.ModifyTime;
end;
Result := tm;
end;
procedure WriteCommData(data,user,time : string);
begin
StrCopy(ShareMem^.Data,pchar(data));
StrCopy(ShareMem^.ModifyUser,pchar(user));
StrCopy(ShareMem^.ModifyTime,pchar(time));
end;
end.
代碼的另一個部分就是根據需要調用這些函數的FirstTest.pas,即上面窗體單元對應的代碼
...{
作者: wudi_1982
聯系方式: wudi_1982@hotmail.com
開發工具以及平台:DELPHI7+WINXP
轉載請注明出處
}
unit FirstTest;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
const
WM_MYMESSAGE=WM_USER+1024; //一個自定義消息,用來通知接受程序數據到達
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
edData: TEdit;
edModifyUser: TEdit;
edModifyTime: TEdit;
Panel1: TPanel;
btnCreate: TButton;
btnOpen: TButton;
btnRead: TButton;
btnSet: TButton;
btnClose: TButton;
btnClear: TButton;
StatusBar1: TStatusBar;
GroupBox2: TGroupBox;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
edRData: TEdit;
edRUser: TEdit;
edRTime: TEdit;
procedure btnCreateClick(Sender: TObject);
procedure btnOpenClick(Sender: TObject);
procedure btnSetClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure btnReadClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnClearClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
atm : TAtom; //一個原子
nextwindow : string; //被發送消息程序的標題信息
procedure MyMessage(var msg : TMessage);message WM_MYMESSAGE; //自定義消息的處理
public
end;
var
Form1: TForm1;
implementation
uses comm;
...{$R *.dfm}
procedure TForm1.btnCreateClick(Sender: TObject);
begin
if CreateMap = 0 then
ShowMessage('內存映射建立失敗')
else begin
btnCreate.Enabled := false;
btnOpen.Enabled := false;
StatusBar1.Panels[0].Text := '內存映射文件新建立完畢'
end;
end;
procedure TForm1.btnOpenClick(Sender: TObject);
begin
if OpenMap = 0 then
ShowMessage('內存映射打開失敗')
else begin
btnCreate.Enabled := false;
btnOpen.Enabled := false;
StatusBar1.Panels[0].Text := '內存映射文件打開完畢'
end;
end;
procedure TForm1.btnSetClick(Sender: TObject);
var
hd : THandle;
begin
if (edData.Text = '') or (edModifyUser.Text = '') then
ShowMessage('請填寫完整信息')
else begin
edModifyTime.Text := FormatDateTime('mm:hh:mm',Now);
WriteCommData(edData.Text,edModifyUser.Text,edModifyTime.Text);
//查找此程序的另外一個實例,如果找到,發送數據到達的消息
hd := FindWindow(nil,pchar(nextwindow));
if hd <> 0 then
SendMessage(hd,WM_MYMESSAGE,1,0);
end;
end;
procedure TForm1.btnCloseClick(Sender: TObject);
begin
UnLockMap;
CloseMap;
btnCreate.Enabled := true;
btnOpen.Enabled := true;
end;
procedure TForm1.btnReadClick(Sender: TObject);
var
tm : TShareMem;
begin
tm := ReadCommData;
edRData.Text := tm.Data;
edRUser.Text := tm.ModifyUser;
edrTime.Text := tm.ModifyTime;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnLockMap;
CloseMap;
//下面這一句非常重要,如果不及時刪除原子表中添加的原子,
//怕是只有重啓計算機才能幹掉程序啓動時添加到原子表中的信息了
GlobalDeleteAtom(atm);
end;
procedure TForm1.btnClearClick(Sender: TObject);
begin
edData.Text := '';
edModifyUser.Text := '';
edModifyTime.Text := '';
end;
procedure TForm1.MyMessage(var msg: TMessage);
begin
if msg.WParam = 1 then
begin
Application.BringToFront;
StatusBar1.Panels[0].Text := '新數據到代';
btnReadClick(nil);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//下面的代碼將在程序啓動時執行,主要是通過原子表檢查此程序是否運行,
//本程序運行運行兩個實例,一個用來建立映射文件,
//一個用來打開映射文件,你完全可以用兩個不同的程序來處理,這裏爲了方便
//以及演示原子表的使用而采用一個程序執行兩次的方法來做
if GlobalFindAtom(pchar('wudi_1982')) <> 0 then//查找原子表如果第一個窗體已經存在
begin
if GlobalFindAtom(pchar('jingyang')) <> 0 then//如果第二個窗體也存在
begin
Application.Terminate;
end else begin
//添加原子到原子表,以記錄此程序的第二個實例已經運行,並做相應操作
atm := GlobalAddAtom(pchar('jingyang'));
Application.Title := 'MyMapForm_2';
Form1.Caption := 'MyMapForm_2';
nextwindow := 'MyMapForm_1';
end;
end else begin
//添加原子到原子表,以記錄此程序的第一個實例已經運行,並做相應操作
atm := GlobalAddAtom(pchar('wudi_1982'));
Application.Title := 'MyMapForm_1';
Form1.Caption := 'MyMapForm_1';
nextwindow := 'MyMapForm_2';
end;
end;
end.
程序運行效果圖:
例程的使用方法:
編譯之後,運行此程序的兩個實例,在其中一個實例中,點擊按鈕【新建內存映射】,另一個實例使用【打開已存在的映射】,然後在窗體的發送部分,填寫相應信息,然後點擊【設計內存信息】,就可以看到效果了。
注:WINXP+D7;
轉載請注明出處
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
在WIN32種,通過使用映像文件在進程間實現共享文件或內存共享,如果利用相同的映像名字或文件句柄,則不同的進程可以通過一個指針來讀寫同一個文件或者同一內存數據塊,並把他們當成該進程內存空間的一部分。
內存映像文件可以映射一個文件、一個文件中的指定區域或者指定的內存塊,其中的數據就可以用內存讀取指令來直接訪問,而不用頻繁的使用操作文件的I/O系統函數,從而提高文件的存取速度和效率。
映像文件的另一個重要作用就是用來支持永久命名的共享內存。要在兩個應用程序之間共享內存,可以在一個應用程序中創建一個文件並映射,然後另外一個程序通過打開和映射此文件,並把它當作自己進程的內存來使用。事實上,此內存是所有進程共享的。
下面將先描述一下幾個操作內存的API函數
1、創建內存映射的API函數
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]This function creates a named or unnamed file-mapping object for the specified file.
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]HANDLE CreateFileMapping(
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]//通過調用fileopen or FileCreate後返回的文件句柄,如果是內存,則//$FFFFFFFF
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] HANDLE hFile,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //安全性結構,一般null
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //文件試圖的保護類型,PAGE_READONLY,PAGE_READWRITE,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] DWORD flProtect,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //文件大小的高32位,一般設置爲0,除非文件大于4G
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] DWORD dwMaximumSizeHigh,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //文件大小低32位
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] DWORD dwMaximumSizeLow,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //映射的名字
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] LPCTSTR lpName
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
2、打開一個映射文件
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]HANDLE OpenFileMapping(
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //訪問數據模式:FILE_MAP_ALL_ACCESS,FILE_MAP_COPY,FILE_MAP_READ, //FILE_MAP_WRITE
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] DWORD dwDesiredAccess,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //子進程是否可以繼承
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] BOOL bInheritHandle,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //映射文件名
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] LPCTSTR lpName
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]);
3、將映射文件映射到本進程的API函數
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]LPVOID MapViewOfFile(
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //通過CreateFileMapping或OpenFileMapping返回的文件句柄
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] HANDLE hFileMappingObject,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //訪問的數據模式:FILE_MAP_WRITE,FILE_MAP_READ,FILE_MAP_ALL_ACCESS
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] DWORD dwDesiredAccess,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //指定數據在映射文件中起始位置的高32位
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] DWORD dwFileOffsetHigh,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //低32位
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] DWORD dwFileOffsetLow,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //需要映射的大小,0表示全部
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] DWORD dwNumberOfBytesToMap
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]);
4、關閉映射的api函數
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]BOOL UnmapViewOfFile(
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //由MapViewofFile産生的映射文件的地址
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] LPCVOID lpBaseAddress
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]);
5、下面例子中還會用到的幾個api函數
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]創建互斥對象
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]HANDLE WINAPI CreateMutex(
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] LPSECURITY_ATTRIBUTES lpMutexAttributes,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] BOOL bInitialOwner,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] LPCTSTR lpName
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]DWORD WaitForSingleObject(
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] HANDLE hHandle,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] DWORD dwMilliseconds
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
上文中曾經提到我們使用內存映射的方式來在多個程序或DLL中共享數據。下面就通過一個程序來介紹。
雖然我要描述的是再兩個應用程序之間共享數據,不過爲了省事,我將所有的內容都寫在一個程序中,你只需要把此程序打開兩次就可以了。一個程序用來建立內存映射文件,另外一個程序用來打開內存映射文件。並通過對公共內存的讀寫操作來演示信息共享。
程序的窗體單元代碼如下:
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]object Form1: TForm1
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 236
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 147
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 327
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 412
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = 'MyMapForm_1'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Color = clBtnFace
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Font.Charset = ANSI_CHARSET
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Font.Color = clWindowText
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Font.Height = -13
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Font.Name = '宋體'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Font.Style = []
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] OldCreateOrder = False
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] OnClose = FormClose
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] OnCreate = FormCreate
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] PixelsPerInch = 96
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TextHeight = 13
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object GroupBox1: TGroupBox
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 0
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 0
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 319
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 121
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Align = alTop
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '共享內存的信息[發送]'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 0
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object Label1: TLabel
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 16
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 24
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 26
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 13
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '數據'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object Label2: TLabel
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 16
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 48
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 39
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 13
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '修改者'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object Label3: TLabel
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 16
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 80
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 52
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 13
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '修改時間'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object edData: TEdit
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 75
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 21
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 230
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 21
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 0
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object edModifyUser: TEdit
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 74
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 49
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 231
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 21
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 1
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object edModifyTime: TEdit
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 74
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 73
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 231
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 21
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Enabled = False
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 2
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object Panel1: TPanel
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 0
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 242
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 319
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 121
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Align = alClient
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] BevelOuter = bvNone
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 1
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object btnCreate: TButton
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 32
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 8
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 113
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 25
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '新建內存映射'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 0
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] OnClick = btnCreateClick
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object btnOpen: TButton
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 160
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 8
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 113
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 25
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '打開已存在映射'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 1
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] OnClick = btnOpenClick
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object btnRead: TButton
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 160
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 45
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 113
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 25
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '讀取映射信息'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 2
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] OnClick = btnReadClick
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object btnSet: TButton
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 32
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 45
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 113
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 25
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '設置內存信息'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 3
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] OnClick = btnSetClick
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object btnClose: TButton
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 32
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 85
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 113
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 25
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '關閉映射'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 4
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] OnClick = btnCloseClick
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object btnClear: TButton
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 160
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 85
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 113
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 25
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '清空編輯狂'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 5
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] OnClick = btnClearClick
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object StatusBar1: TStatusBar
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 0
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 363
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 319
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 19
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Panels = <
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] item
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 200
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end>
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object GroupBox2: TGroupBox
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 0
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 121
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 319
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 121
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Align = alTop
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '共享內存的信息[接收]'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Enabled = False
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 3
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object Label4: TLabel
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 16
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 24
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 26
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 13
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '數據'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object Label5: TLabel
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 16
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 48
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 39
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 13
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '修改者'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object Label6: TLabel
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 16
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 80
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 52
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 13
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Caption = '修改時間'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object edRData: TEdit
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 75
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 21
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 230
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 21
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 0
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object edRUser: TEdit
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 74
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 49
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 231
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 21
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 1
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] object edRTime: TEdit
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Left = 74
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Top = 73
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Width = 231
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Height = 21
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Enabled = False
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TabOrder = 2
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end
程序的代碼主要分爲兩部分,comm.pas單元中定義幾個對操作內存映射的函數,以及共享內存的結構信息。代碼如下:
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif[/img][/url][url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif[/img][/url]...{
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif[/img][/url] 作者: wudi_1982
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif[/img][/url] 聯系方式: wudi_1982@hotmail.com
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif[/img][/url] 開發工具以及平台:DELPHI7+WINXP
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif[/img][/url] 轉載請注明出處
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif[/img][/url]}
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]unit comm;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]interface
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]uses
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Windows,SysUtils;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]const
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] FILEMAPPINGNAME = 'MyFileMapping'; // 指定內存映射的名字
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] MUTEXNAME= 'MutexName'; //互斥對象的名字
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]type
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]TShareMem = record //共享內存的結構信息
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Data : array[0..255] of char; //描述共享數據信息
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ModifyUser : array[0..255] of char; //對數據的修改者
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ModifyTime : array[0..7] of char; //數據最近一次的修改時間
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]PShareMem = ^TShareMem;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]var
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] FileMapHandle : THandle; //建立映射的句柄
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] MutexHandle : THandle; // 互斥對象的句柄
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ShareMem : PShareMem; //一個指向共享內存的指針
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] function OpenMap:THandle; //打開一個映射文件並映射到本進程中
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] function CreateMap:THandle; //新建一個映射文件並映射到本進程中
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] function LockMap:boolean; //加鎖
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure UnLockMap; //解鎖
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure CloseMap; //關閉映射
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] function ReadCommData:TShareMem; //從共享信息中讀取數據
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure WriteCommData(data,user,time : string);//對共享內存進行寫操作
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]implementation
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]function OpenMap:THandle;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //打開映射文件
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] FileMapHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, //所有權限
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] false, //子進程不可繼承
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] FILEMAPPINGNAME
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] );
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if FileMapHandle <> 0 then //如果映射文件打開成功
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //將映射文件映射到本進程
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ShareMem := pSharemem(MapViewOfFile(FileMapHandle,FILE_MAP_ALL_ACCESS,0,0,0));
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if ShareMem = nil then
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] CloseHandle(FileMapHandle);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Result := 0;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end else begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //初始化共享區域
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] FillChar(ShareMem^,sizeof(TSharemem),0);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Result := FileMapHandle;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end else Result := 0;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]function CreateMap:THandle;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] FileMapHandle := CreateFileMapping($FFFFFFFF,//內存映射
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] nil,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] PAGE_READWRITE,//讀寫操作
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] 0,//高32位 ,一般爲0,除非要映射的文件大于4G
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] sizeof(TShareMem),
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] FILEMAPPINGNAME
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] );
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if FileMapHandle <> 0 then
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ShareMem := pSharemem(MapViewOfFile(FileMapHandle,FILE_MAP_ALL_ACCESS,0,0,0));
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if ShareMem = nil then
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] CloseHandle(FileMapHandle);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Result := 0;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end else Result := FileMapHandle;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end else Result := 0;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]function LockMap:boolean;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //創建一個互斥對象並加鎖
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] MutexHandle := CreateMutex(nil,false,MUTEXNAME);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if MutexHandle <> 0 then
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if WaitForSingleObject(MutexHandle,1000)= WAIT_FAILED then Result := false
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] else Result := true;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end else Result := false;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure UnLockMap;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //釋放資源
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if MutexHandle <> 0 then
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ReleaseMutex(MutexHandle);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] CloseHandle(MutexHandle);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure CloseMap;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] // 關閉映射並釋放資源
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if ShareMem <> nil then UnmapViewOfFile(ShareMem);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if FileMapHandle <> 0 then CloseHandle(FileMapHandle);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]function ReadCommData:TShareMem;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]var
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] tm : TShareMem;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] with tm do
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Data := ShareMem^.Data;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ModifyUser := ShareMem^.ModifyUser;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ModifyTime := ShareMem^.ModifyTime;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Result := tm;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure WriteCommData(data,user,time : string);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] StrCopy(ShareMem^.Data,pchar(data));
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] StrCopy(ShareMem^.ModifyUser,pchar(user));
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] StrCopy(ShareMem^.ModifyTime,pchar(time));
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end.
代碼的另一個部分就是根據需要調用這些函數的FirstTest.pas,即上面窗體單元對應的代碼
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif[/img][/url][url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif[/img][/url]...{
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif[/img][/url] 作者: wudi_1982
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif[/img][/url] 聯系方式: wudi_1982@hotmail.com
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif[/img][/url] 開發工具以及平台:DELPHI7+WINXP
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif[/img][/url] 轉載請注明出處
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif[/img][/url]}
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]unit FirstTest;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]interface
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]uses
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Dialogs, StdCtrls, ComCtrls, ExtCtrls;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]const
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] WM_MYMESSAGE=WM_USER+1024; //一個自定義消息,用來通知接受程序數據到達
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]type
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] TForm1 = class(TForm)
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] GroupBox1: TGroupBox;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Label1: TLabel;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Label2: TLabel;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Label3: TLabel;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edData: TEdit;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edModifyUser: TEdit;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edModifyTime: TEdit;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Panel1: TPanel;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnCreate: TButton;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnOpen: TButton;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnRead: TButton;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnSet: TButton;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnClose: TButton;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnClear: TButton;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] StatusBar1: TStatusBar;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] GroupBox2: TGroupBox;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Label4: TLabel;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Label5: TLabel;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Label6: TLabel;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edRData: TEdit;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edRUser: TEdit;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edRTime: TEdit;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure btnCreateClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure btnOpenClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure btnSetClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure btnCloseClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure btnReadClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure FormClose(Sender: TObject; var Action: TCloseAction);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure btnClearClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure FormCreate(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] private
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] atm : TAtom; //一個原子
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] nextwindow : string; //被發送消息程序的標題信息
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] procedure MyMessage(var msg : TMessage);message WM_MYMESSAGE; //自定義消息的處理
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] public
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]var
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Form1: TForm1;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]implementation
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]uses comm;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif[/img][/url][url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif[/img][/url]...{$R *.dfm}
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure TForm1.btnCreateClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if CreateMap = 0 then
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ShowMessage('內存映射建立失敗')
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] else begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnCreate.Enabled := false;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnOpen.Enabled := false;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] StatusBar1.Panels[0].Text := '內存映射文件新建立完畢'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure TForm1.btnOpenClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if OpenMap = 0 then
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ShowMessage('內存映射打開失敗')
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] else begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnCreate.Enabled := false;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnOpen.Enabled := false;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] StatusBar1.Panels[0].Text := '內存映射文件打開完畢'
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure TForm1.btnSetClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]var
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] hd : THandle;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if (edData.Text = '') or (edModifyUser.Text = '') then
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] ShowMessage('請填寫完整信息')
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] else begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edModifyTime.Text := FormatDateTime('mm:hh:mm',Now);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] WriteCommData(edData.Text,edModifyUser.Text,edModifyTime.Text);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //查找此程序的另外一個實例,如果找到,發送數據到達的消息
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] hd := FindWindow(nil,pchar(nextwindow));
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if hd <> 0 then
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] SendMessage(hd,WM_MYMESSAGE,1,0);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure TForm1.btnCloseClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] UnLockMap;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] CloseMap;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnCreate.Enabled := true;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnOpen.Enabled := true;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure TForm1.btnReadClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]var
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] tm : TShareMem;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] tm := ReadCommData;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edRData.Text := tm.Data;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edRUser.Text := tm.ModifyUser;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edrTime.Text := tm.ModifyTime;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] UnLockMap;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] CloseMap;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //下面這一句非常重要,如果不及時刪除原子表中添加的原子,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //怕是只有重啓計算機才能幹掉程序啓動時添加到原子表中的信息了
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] GlobalDeleteAtom(atm);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure TForm1.btnClearClick(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edData.Text := '';
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edModifyUser.Text := '';
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] edModifyTime.Text := '';
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure TForm1.MyMessage(var msg: TMessage);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if msg.WParam = 1 then
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Application.BringToFront;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] StatusBar1.Panels[0].Text := '新數據到代';
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] btnReadClick(nil);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]procedure TForm1.FormCreate(Sender: TObject);
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //下面的代碼將在程序啓動時執行,主要是通過原子表檢查此程序是否運行,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //本程序運行運行兩個實例,一個用來建立映射文件,
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //一個用來打開映射文件,你完全可以用兩個不同的程序來處理,這裏爲了方便
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //以及演示原子表的使用而采用一個程序執行兩次的方法來做
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if GlobalFindAtom(pchar('wudi_1982')) <> 0 then//查找原子表如果第一個窗體已經存在
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] if GlobalFindAtom(pchar('jingyang')) <> 0 then//如果第二個窗體也存在
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Application.Terminate;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end else begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //添加原子到原子表,以記錄此程序的第二個實例已經運行,並做相應操作
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] atm := GlobalAddAtom(pchar('jingyang'));
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Application.Title := 'MyMapForm_2';
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Form1.Caption := 'MyMapForm_2';
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] nextwindow := 'MyMapForm_1';
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end else begin
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] //添加原子到原子表,以記錄此程序的第一個實例已經運行,並做相應操作
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] atm := GlobalAddAtom(pchar('wudi_1982'));
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Application.Title := 'MyMapForm_1';
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] Form1.Caption := 'MyMapForm_1';
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] nextwindow := 'MyMapForm_2';
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url] end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end;
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]
[url=/bbs/detail_501489.html][img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img][/url]end.
程序運行效果圖:
[url=/bbs/detail_501489.html][img]http://p.blog.csdn.net/images/p_blog_csdn_net/wudi_1982/Mapfile.JPG[/img][/url]
例程的使用方法:
編譯之後,運行此程序的兩個實例,在其中一個實例中,點擊按鈕【新建內存映射】,另一個實例使用【打開已存在的映射】,然後在窗體的發送部分,填寫相應信息,然後點擊【設計內存信息】,就可以看到效果了。
注:WINXP+D7;
轉載請注明出處