uses Windows;
const
FileMapName = '_ThisIsJustAUniqueString91231_';
type
PData = ^TData;
TData = packed record
FUniqueID : DWORD;
FName: string;
/add other data if you like
end;
var
hFileMap: HANDLE;
function WriteData(const Data: TData): Boolean;
var
pPData: PData;
begin
Result := False;
pPData := MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TData));
if (pPData <> nil) then
begin
pPData^.FUniqueID := Data.FUniqueID;
pPData^.FName := Data.FName;
UnmapViewOfFile(pPData);
Result := True;
end;
end;
function ReadData(var Data: TData): Boolean;
var
hOpenFileMap: HANDLE;
pPData: PData;
begin
Result := False;
hOpenFileMap := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, PChar(FileMapName));
if (hOpenFileMap <> 0) then
begin
pPData := MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if (pPData <> nil) then
begin
Data.FUniqueID := pPData^.FUniqueID;
Data.FName := pPData^.FName;
Result := True;
UnmapViewOfFile(pPData);
end;
CloseHandle(hOpenFileMap);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
hFileMap := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(TData), PChar(FileMapName));
if hFileMap = 0 then
ShowMessage('Cannot create FileMap' + sLineBreak + SysErrorMessage(GetLastOSError));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
CloseHandle(hFileMap);
end;
procedure TForm1.bWriteClick(Sender: TObject);
var
Data: TData;
begin
if hFileMap <> 0 then
begin
Data.FUniqueID := 15;
Data.FName := 'test test test';
if WriteData(Data) then
ShowMessage('Data successfully written to filemap!');
end;
end;
procedure TForm1.bReadClick(Sender: TObject);
var
Data: TData;
begin
if ReadData(Data) then
ShowMessage('UniqeID: ' + IntToStr(Data.FUniqueID) + sLineBreak +
'Name : ' + Data.FName);
end;