关于进程间的数据传输——共享内存映射问题 [结]
共享内存映射.rar
(341.56 KB)
该问题已解决,附件是问题解决后的附件,非常感谢 yeye55
程序A运行后创建一个内存映射对象,产生一个共享内存,然后给这块内存赋值为 “delphi” ,并在点击按钮后弹出对话框显示该内存的值(值为"delphi"),然后在另一程序B里读取已经共享的内存的数据,并显示出来,但在点击了程序B的按钮后弹出来的对话框却没有内容显示。不知道为什么!各位大侠能不能指教下呢?或者给我个简单明了的例子?
以下是 程序 A 的关键部分代码
结构部分:
type
person=record
name:string;
end;
pperson=^person;
================================================================================================
全局变量:
var
Form1: TForm1;
tp:pperson;
ps:person;
hwd:Thandle;
p:Pointer;
================================================================================================
Button1的单击事件:
procedure TForm1.Button1Click(Sender: TObject);
begin
ps.name:='delphi';
hwd:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,SizeOf(person),pchar('myfile'));
if hwd>0 then begin
p:=MapViewOfFile(hwd,FILE_MAP_ALL_ACCESS,0,0,0);
if p<>nil then begin
copymemory(p,@ps,SizeOf(ps));
p:=@ps;
showmessage(pperson(p)^.name);
end;
end;
end;
------------------------------------------------------------------------------------------------------
以下是 程序 B 的关键部分代码
结构部分(和程序 A 一样):
type
person=record
name:string;
end;
pperson=^person;
================================================================================================
全局变量:
var
Form1: TForm1;
hwd1:Thandle;
p1:Pointer;
================================================================================================
Button1的单击事件:
procedure TForm1.Button1Click(Sender: TObject);
begin
hwd1:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False,pchar('myfile'));
if hwd1<>0 then begin
p1:=MapViewOfFile(hwd1,FILE_MAP_ALL_ACCESS,0,0,0);
//copymemory(@str2,p1,SizeOf(p1));
if p1<>nil then begin
showmessage(pperson(p1)^.name);
end;
end;
end;
[ 本帖最后由 hlyan031 于 2010-3-15 02:38 编辑 ]