В моем проекте я реализовал концепцию CreateFileMapping
для обмена памятью между двумя процессами. У меня есть серверный процесс, в котором я храню адрес памяти моих данных сеанса, который содержит сведения о конкретном изображении. И у меня есть клиентский процесс, в котором я читал этот адрес из буфера. Теперь проблема заключается в том, что адрес указан в клиентском процессе, но некоторые детали отсутствуют.Ошибка при использовании Windows CreateFilemapping
Это мой код серверного процесса:
HANDLE hMem;
LPCSTR pBuf;
#define BUF_SIZE 1024
static const char MemoryName[]="Share Memory Name";
hMem=CreateFileMapping(INVALID_HANDLE_VALUE,NULL, PAGE_READWRITE,0, BUF_SIZE, MemoryName);
pBuf = (LPCSTR) MapViewOfFile(hMem, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
CopyMemory((PVOID)pBuf, session, BUF_SIZE);
LtEntity test = LtEntity(pBuf);
Это мой код клиентского процесса:
HANDLE hMem;
LPCSTR pBuf;
#define BUF_SIZE 1024
static const char MemoryName[]="Share Memory Name";
hMem = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, MemoryName);
pBuf = (LPCSTR) MapViewOfFile(hMem, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
LtEntity test = LtEntity(pBuf);
В процессе сервера переменный «тест» содержит все детали, но в клиенте «тест «некоторые данные отсутствуют.
В приведенной ниже тестовой переменной сервера показано прикрепленное изображение, отображающее содержимое переменной.
В тестовой переменной клиента ниже показано прикрепленное изображение, которое показывает содержимое переменной.
Пожалуйста, проверьте разницу мне нужны данные позиции также видны в моем процессе клиента ..
+1 для рекомендации Boost :: interprocess. Не играйте с деталями с низким уровнем ошибок, если вы можете использовать красивую (хорошо протестированную) абстракцию. – lothar