| 導購 | 订阅 | 在线投稿
分享
 
 
 

映射文件的使用

來源:互聯網網民  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; 轉載請注明出處
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有