我给你个示例 type PTLocalBlackList=^TLocalBlackList; TLocalBlackList=record dwUserNodeNum:DWORD; a_chKeyID:array[0..8] of char; a_chDisableDate:array[0..19] of char; end;var pgLocalBlackList:PTLocalBlackList; //打开共享数据 procedure OpenSharedData; var i,iSize:Integer;//共享区间大小 begin iSize:=SizeOf(TLocalBlackList); //创建映射区 hgLocalBlackList:=CreateFileMapping(DWORD(-1),nil,PAGE_READWRITE,0,iSize,chgLocalBlackList); if hgLocalBlackList=0 then begin RaiseLastWin32Error; exit; end; //关联映射区 pgLocalBlackList:=MapViewOfFile(hgLocalBlackList,FILE_MAP_ALL_ACCESS,0,0,iSize); if pgLocalBlackList=nil then begin CloseHandle(hgLocalBlackList); RaiseLastWin32Error; exit; end; pgLocalBlackList^.dwUserNodeNum:=0; pgLocalBlackList^.a_chKeyID:='00000000'+#0; pgLocalBlackList^.a_chDisableDate:='2002-12-02 10:00:00'; end; //关闭共享数据 procedure CloseSharedData; begin UnmapViewOfFile(pgPolItem); CloseHandle(hgPolItem); UnmapViewOfFile(pgLocalBlackList); CloseHandle(hgLocalBlackList); UnmapViewOfFile(pgUserNodeInfo); CloseHandle(hgUserNodeInfo); end;
楼上的朋友,感谢你回答,请你看看我的代码: 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程序显示的值并不是同一个,也可以说映射没有成功,不知道我的推测是否正确,请高手指点,谢谢!
如果你想的话请告知你的Email.我发给你。
type
PTLocalBlackList=^TLocalBlackList;
TLocalBlackList=record
dwUserNodeNum:DWORD;
a_chKeyID:array[0..8] of char;
a_chDisableDate:array[0..19] of char;
end;var
pgLocalBlackList:PTLocalBlackList;
//打开共享数据
procedure OpenSharedData;
var
i,iSize:Integer;//共享区间大小
begin iSize:=SizeOf(TLocalBlackList);
//创建映射区
hgLocalBlackList:=CreateFileMapping(DWORD(-1),nil,PAGE_READWRITE,0,iSize,chgLocalBlackList);
if hgLocalBlackList=0 then begin
RaiseLastWin32Error;
exit;
end;
//关联映射区
pgLocalBlackList:=MapViewOfFile(hgLocalBlackList,FILE_MAP_ALL_ACCESS,0,0,iSize);
if pgLocalBlackList=nil then begin
CloseHandle(hgLocalBlackList);
RaiseLastWin32Error;
exit;
end;
pgLocalBlackList^.dwUserNodeNum:=0;
pgLocalBlackList^.a_chKeyID:='00000000'+#0;
pgLocalBlackList^.a_chDisableDate:='2002-12-02 10:00:00';
end;
//关闭共享数据
procedure CloseSharedData;
begin
UnmapViewOfFile(pgPolItem);
CloseHandle(hgPolItem);
UnmapViewOfFile(pgLocalBlackList);
CloseHandle(hgLocalBlackList);
UnmapViewOfFile(pgUserNodeInfo);
CloseHandle(hgUserNodeInfo);
end;
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程序显示的值并不是同一个,也可以说映射没有成功,不知道我的推测是否正确,请高手指点,谢谢!