Общий доступ к области отображения файлов (Sharing Memory Mapped Files)... Проверьте нижеследующий код:
var
HMapping: THandle;
PMapData: Pointer;
const
MAPFILESIZE = 1000;
procedure OpenMap;
var
llInit: Boolean;
lInt: Integer;
begin
HMapping := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, MAPFILESIZE, pchar('ИМЯ ОБЛАСТИ ОТОБРАЖЕНИЯ'));
// Проверка наличия
llInit := (GetLastError() <> ERROR_ALREADY_EXISTS);
if (hMapping = 0) then begin
ShowMessage('Невозможно создать объект отображения файла');
Application.Terminate;
exit;
end;
PMapData := MapViewOfFile(HMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if PMapData = nil then begin
CloseHandle(HMapping);
ShowMessage('Невозможно отобразить блок памяти');
Application.Terminate;
exit;
end;
if (llInit) then begin
// Если объект отображения создан, инициализируем блок символами #0
memset(PMapData, #0, MAPFILESIZE);
end;
end;
procedure CloseMap;
begin
if PMapData <> nil then begin
UnMapViewOfFile(PMapData);
end;
if HMapping <> 0 then begin
CloseHandle(HMapping);
end;
end; Таким образом любые два или более приложения или DLL могут получить указатели к одному и тому же блоку памяти. В данном примере PMapData указывает на 1000-байтный буфер, инициализированный вначале символами #0. Однако существует одна потенциальная проблема - синхронизация доступа к памяти. Решить эту проблему можно с помощью мьютексов. Вот пример их использования: