Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)aaapublished in(发表于) 2014/7/19 0:11:49 delphi映像内存接收端
接收端主要是利用OpenFileMapping 函数打开内存映像文件,然后接收发送端的信息,具体编写方法如下。(1)新建一个项目。将窗体的Caption 设置为“映像内存接收端”。在窗体上添加一个Memo 组件。(2)程序源代码如下:unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;constWM_DATA = WM_USER + 1024; //自定义消息typePShareMem = ^TShareMem;TShareMem = recordData: array[0..255] of char; //共享内存,注意要与发送数据端的定义相同end;TMyForm = class(TForm)Memo1: TMemo;procedure FormCreate(Sender: TObject);procedure FormClose(Sender: TObject; var Action: TCloseAction);private{ Private declarations }public{ Public declarations }procedure getShareInfo(var Msg: TMessage); message WM_DATA; {处理WM_DATA}end;varMyForm: TMyForm;PShare: PShareMem;MapHandle: THandle;implementation{$R *.DFM}procedure TMyForm.getShareInfo(var Msg: TMessage); {处理WM_DATA}beginif msg.LParam=1 then {是自定义的消息参数}Memo1.Lines.Add(PShare^.Data);end;procedure TMyForm.FormCreate(Sender: TObject);beginMapHandle := OpenFileMapping(FILE_MAP_WRITE, {获取完全访问映射文件}False, {不可继承的}pchar(’Map Name’)); {映射文件名字}if MapHandle = 0 thenbeginShowMessage(’不能定位内存映射文件块!’);Halt;end;PShare := PShareMem(MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0));if PShare = nil thenbeginCloseHandle(MapHandle);ShowMessage(’Can’’t View Memory Map’);Application.Terminate;Exit;end;FillChar(PShare^, SizeOf(TShareMem), 0);end;procedure TMyForm.FormClose(Sender: TObject; var Action: TCloseAction);beginCloseHandle(MapHandle);end;end.(3)保存工程为“GetDemo.dpr”。
赞