![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем привет. Написал небольшую 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()); Почему то, второе приложение всегда выдаёт то значение, которое первое приложение записало ПЕРВЫМ, а не каждый раз разные значения. Обьясните пожалуйста, что я не так делаю. Наверно как то не акт пишу в первом приложении или не так читаю во втором... |