use*_*348 -1 delphi ipc delphi-xe2
我需要在两个正在运行的程序之间共享一个布尔变量的值(例如MyProgramA.exe和MyProgramB.exe); 这些是不同的程序,而不是同一程序的实例.我更喜欢内存中的全局变量而不是带有Windows消息的IPC,因为我认为在内存中设置一个可由不同程序访问的全局变量比使用Windows消息的IPC更快(即瞬时),更安全,更可靠.
您可以使用Win32 API CreateFileMapping()函数分配一块共享内存,然后使用该MapViewOfFile()函数访问该内存.两个进程都需要CreateFileMapping()使用相同的名称进行调用才能共享相同的映射,但每个进程都会收到自己的映射本地视图.
例如:
uses
..., Windows;
var
Mapping: THandle = 0;
MyBoolean: PBoolean = nil;
...
Mapping := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(Boolean), 'MyMappedBoolean');
if Mapping <> 0 then
MyBoolean := PBoolean(MapViewOfFile(Mapping, FILE_MAP_WRITE, 0, 0, SizeOf(Boolean));
...
if MyBoolean <> nil then
MyBoolean^ := ...;
...
if MyBoolean <> nil then
begin
if MyBoolean^ then
...
else
...
end;
...
if MyBoolean <> nil then
UnmapViewOfFile(MyBoolean);
if Mapping <> 0 then
CloseHandle(Mapping);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
988 次 |
| 最近记录: |