如何跨 DLL 共享对象?
例子:
DLLA 由进程 A 加载。DLL A 收集数据(拦截来自进程 A 的调用)。
DLLB 由 Pascal 程序加载,并希望使用 DLLA 收集的数据。
我用 DLLA 创建了一个映射,如下所示:
GL_EXTERN bool __stdcall CreateSharedMemory()
{
if ((hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, MapSize, SharedMemoryName.c_str())) == NULL)
{
return false;
}
if ((pData = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MapSize)) == NULL)
{
CloseHandle(hMapFile);
return false;
}
return true;
}
DLLB 只是打开它并映射它。
他们可以共享命令。所以 DLL B 可以给出 DLLA 命令并检索数据,但我似乎无法弄清楚如何在内存中共享对象/类/向量。
我尝试过使用指针,但意识到这是无效的并且会出现访问冲突错误。此外,它似乎可以很好地共享整数,但似乎无法共享浮点数:S 我怎样才能完成这些任务?
编辑:沟通我做:
int* Foo = static_cast<int*>(pData); where pData is the map pointer.
//Then I do:
Foo[0] = X; Foo[1] = Y;
并让进程从相应的值中读取和写入。
信息:
这是 DLLA 的文件:http: //pastebin.com/MFkqwxJe 和http://pastebin.com/MDeWprkb
这是 DLLB 的文件:http: //pastebin.com/Uj3dijc4 和http://pastebin.com/vkDdPp7e
编辑:根据要求将其缩小到:http ://pastebin.com/hNF6Cu2L 。