内存映射

type
   TData = record
     A: Integer ;
     //其他数据
   end ;
   PData = ^TData;
 
var
   hMap: Cardinal ;
   data:PData;
 
procedure  MyDllMain(n: Integer );
begin
   case  n of
     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 ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值