Безболезненно как в С++ не получилось... Пришлось писать как раз через:
Цитата(kami @ 27.8.2011, 12:54 ) | | А ну как CreateFileMapping или MapViewOfFile не сработают? |
Ловите может кому пригодится
| Код | unit untSharedData;
interface
uses Windows, SysUtils;
type PSharedData = ^TSharedData; TSharedData = record Handle: THandle; // Добавьте поля необходимые вам. end;
function GetSharedData(AName: string): PSharedData; function CreateSharedData(AName: string; ASharedData: TSharedData): THandle; // Не забудьте выполнить CloseHandle после завершения работы
implementation
function GetSharedData(AName: string): PSharedData; var LMapFile: THandle; begin LMapFile := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, PChar(AName)); try if LMapFile = 0 then RaiseLastOSError;
Result := MapViewOfFile(LMapFile, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TSharedData));
if not Assigned(Result) then RaiseLastOSError; finally CloseHandle(LMapFile); end; end;
function CreateSharedData(AName: string; ASharedData: TSharedData): THandle; var LSharedData: PSharedData; begin Result := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TSharedData), PChar(AName));
if Result = 0 then RaiseLastOSError;
LSharedData := MapViewOfFile(Result, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TSharedData));
if not Assigned(LSharedData) then RaiseLastOSError;
Move(ASharedData, LSharedData^, SizeOf(TSharedData)); end;
end.
|
|