Re: Общая память для процессов
От: Pavel Dvorkin Россия  
Дата: 17.02.11 17:32
Оценка: 2 (1) +1
Здравствуйте, ZestMan, Вы писали:


ZM>Пробовал через mapping file, но там возникает проблема с указателями


Да, конечно. Маппируются-то они в разные адреса в разных процессов. Надо вместо указателей использовать смещения от базового адреса. Они всегда валидны.

Можно, правда, попытаться их смаппировать по одному и тому же адресу в обоих процессах, используя MapViewOfFileEx

LPVOID WINAPI MapViewOfFileEx(
__in HANDLE hFileMappingObject,
__in DWORD dwDesiredAccess,
__in DWORD dwFileOffsetHigh,
__in DWORD dwFileOffsetLow,
__in SIZE_T dwNumberOfBytesToMap,
__in LPVOID lpBaseAddress);


но это как повезет : место может быть и занято.


ZM>Как вариант мне посоветовали extern "C"__declspec(dllexport), сказав что из .exe тоже можно экспортировать, но у меня что-то так и не получилось... хотя если создать общую dll для обоих процессов, тогда нормально получаю указатель на нужную структуру обоими процессами.


Именно с DLL и проще всего. См. #pragma dataseg. Если использовать именованную разделяемую секцию, то она будет одной и той же для всех проекций этой DLL во все процессы.

http://rsdn.ru/forum/dotnet/3182030.1.aspx
Автор: Pavel Dvorkin
Дата: 20.11.08
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.