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
;