Всем привет. Написал небольшую DLL для работы с FileMapping:
Код:
...
var
hFileMapObj: THandle;
lpBaseAddress: PChar;
Procedure CreateMyFileMapping(); export; stdcall;
begin
hFileMapObj := CreateFileMapping(MAXDWORD, nil, PAGE_READWRITE, 0, 4, 'MySharedValue12345');
if (hFileMapObj = 0) then ShowMessage('Не могу создать FileMapping!')
else
lpBaseAddress := MapViewOfFile(hFileMapObj, FILE_MAP_WRITE, 0, 0, 0);
if lpBaseAddress = nil then ShowMessage('Не могу подключить FileMapping!');
end;
Procedure InsertStringToFileMapping(str: PChar); export; stdcall;
begin
StrPCopy(lpBaseAddress, str);
end;
Function ReadMyFileMapping(): PChar; export; stdcall;
begin
ReadMyFileMapping := PChar(lpBaseAddress);
end;
Есть 2 приложения, которые используют эту библиотеку(они должны с её помощью "общаться" между собой).
Первое приложение делает примерно следующее:
Код:
CreateMyFileMapping();
while (true)
InsertStringToFileMapping("какое-то значение, разное в каждый момент времени");
Второе приложение обращается к этому же самому маппингу(читает то, что пишет первое):
Код:
CreateMyFileMapping();
while (true)
ShowMessage(ReadMyFileMapping());
Почему то, второе приложение всегда выдаёт то значение, которое первое приложение записало ПЕРВЫМ, а не каждый раз разные значения. Обьясните пожалуйста, что я не так делаю. Наверно как то не акт пишу в первом приложении или не так читаю во втором...