内存映射

来源:互联网 发布:电脑重装系统恢复数据 编辑:程序博客网 时间:2024/06/05 18:38
type
  TData = record
    A:Integer;
    //其他数据
  end;
  PData = ^TData;
 
var
  hMap:Cardinal;
  data:PData;
 
procedure MyDllMain(n:Integer);
begin
  case nof
    DLL_PROCESS_ATTACH:
      begin
        hMap:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False,'名字');
        if hMap = 0 then//没有就创建
        begin
          //内存映射的话,第一个参数必须是$FFFFFFFF,文件映射的话就是文件句柄
          //第二个参数:安全,一般为nil
          //第三个参数:映射文件的属性,我们要可读可写
          //第四个参数:要映射数据大小的高4个字节
          //第五个参数:要映射数据大小的低4个字节
          //第六个参数:唯一的名字
          hMap:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,SizeOf(TData),'名字');
          if hMap=0 then//创建失败
            Exit;
        end;
        //映射数据
        data:=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0);//全部映射出来
        if data = nil then//映射失败
          Exit;
      end;
    DLL_PROCESS_DETACH:
      begin
        if Boolean(data)then
        begin
          UnmapViewOfFile(data);
          CloseHandle(hMap);
        end;
      end;
  end;
end;
0 0
原创粉丝点击