var HOOKID:Longint;
    MapHandle:THandle;
    ModifyData:Pointer;
const cMMFileName='MyBegin';type
TFunc=function (DllName:string):longint;stdcall;
var MyFunc:TFunc;procedure OpenShareData;
var Size:integer;
begin
GetMem(ModifyData,255);
 Size:=SizeOf(ModifyData);
 MapHandle:=CreateFileMapping(DWORD(-1),nil,PAGE_READWRITE,0,Size,ModifyData);
 MyFunc:=MapViewOfFile(MapHandle,FILE_MAP_ALL_ACCESS,0,0,Size);
 MyFunc:=ModifyData;//ModifyData是我用另一个过程给传递的值
end;当我的A程序调用的时候,MyFunc=nil,然后我用A程序给它值,然后再显示结果,一切正常,按道理来说,现在MyFunc已经有实际值了,但是,当我用B程序显示MyFunc的值时,还是MyFunc=nil,由此可见,A程序修改MyFunc的值和B程序显示的值并不是同一个,也可以说映射没有成功,不知道我的推测是否正确,请高手指点,谢谢!

解决方案 »

  1.   

    如果 myfunc 是dll中的变量,出现这种情况就不奇怪了。
    dll中的变量每个调用的程序都有一份.另外:
       MyFunc:=MapViewOfFile(MapHandle,FILE_MAP_ALL_ACCESS,0,0,Size);
    这句话不明白,msdn说 MapViewOfFile 如果成功返回的是印象的开始地址.如果要共享文件: 
        CreateFileMapping  A初始化印象文件;
        OpenFileMapping    B打开印象文件;
      

  2.   

    你的CreateFileMapping用错了,
    ------------------------------------
    MagHandle := CreateFileMapping(INVALID_HANDLE_VALUE,
        nil, PAEG_READWRITE, 0, 255, PChar(cMMFileName));
    ModifyData := MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, 255);