www.pudn.com > SPYQQ3.rar > ShareData2.pas


unit ShareData; 
 
interface 
uses windows,Common; 
 
type 
  PGlobalDllData = ^TGlobalDllData; 
  TGlobalDllData = record 
     CfgFileName : String[255]; 
  end; 
 
procedure CreateShareData; 
procedure OpenShareData; 
procedure CloseShareData; 
function  GetShareData : PGlobalDllData; 
   
implementation 
 
var 
  GlobalData: PGlobalDllData = nil; //这是一个全局变量,指向创建的内存映射文件。 
  MapHandle: THandle = 0; 
 
procedure CreateShareData; 
var 
  size: integer; 
begin 
  size := sizeof(TGlobalDllData); 
  mapHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, size, DllShare); 
  if mapHandle = 0 then Exit; 
  GlobalData := MapViewOfFile(mapHandle, File_map_all_Access, 0, 0, size); 
  if GlobalData = nil then 
  begin 
    CloseHandle(MapHandle); 
    //RaiseLastWin32Error; 
  end; 
end; 
 
procedure OpenShareData; 
var 
  size: integer; 
begin 
  size := sizeof(TGlobalDllData); 
  mapHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, DllShare); 
  if mapHandle = 0 then Exit; 
  GlobalData := MapViewOfFile(mapHandle, File_map_all_Access, 0, 0, size); 
  if GlobalData = nil then 
  begin 
    CloseHandle(MapHandle); 
    //RaiseLastWin32Error; 
  end; 
end; 
 
function GetShareData : PGlobalDllData; 
begin 
  if not Assigned(GlobalData) then 
    Result := nil 
  else 
    Result := GlobalData;   
end; 
 
procedure CloseShareData;  
begin 
  if Assigned(GlobalData) then begin 
     UnMapViewOfFile(GlobalData); 
     CloseHandle(MapHandle); 
     MapHandle := 0; 
  end; 
  if MapHandle <> 0 then 
     CloseHandle(MapHandle); 
end; 
 
end.