标题:关于进程间的数据传输——共享内存映射问题 [结]
只看楼主
hlyan031
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-2-20
 问题点数:0 回复次数:5 
关于进程间的数据传输——共享内存映射问题 [结]
共享内存映射.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 编辑 ]
搜索更多相关主题的帖子: 映射 进程 内存 数据传输 
2010-02-20 22:25
hlyan031
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-2-20
得分:0 
自己顶个!希望哪位大侠帮助下
2010-02-22 16:10
hlyan031
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-2-20
得分:0 
哪位大虾能留下步帮我这个菜鸟解答下啊
2010-03-06 19:20
yeye55
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:152
注 册:2007-1-19
得分:0 
把:

name:string;

换成:

name:array [0..10] of Char;

数组大小根据需要定。

我的百度空间→http://hi.baidu.com/yeye55
2010-03-07 18:54
hlyan031
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-2-20
得分:0 
非常感谢 yeye55大虾 ~thank you very much~确实如你所说的一样,给记录属性 name 加了长度以后就正常了!
我把name:string;改成了name:string[8];
只是不知道如何结贴。
2010-03-15 02:26
enjy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-10-16
得分:0 
今天碰到了,学习来了
2013-10-16 16:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-297848-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.442849 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved