gpt4 book ai didi

c++ - 两个应用程序 (*.exe) 使用来自数据 DLL 的相同数据指针?

转载 作者:行者123 更新时间:2023-11-30 04:19:09 26 4
gpt4 key购买 nike

我有一个巨大的程序 (A),它使用了大约 30 个(大部分是我自己的,一些是第三方的)dll。它使用 ActiveX、ATL 和 MFC 来做不同的事情。现在我想将 wxWidgets 用于一些特殊任务,并将从程序中调用 wxWidgets 对话框。我可以使用带有 wxW.. 部分的特殊设计的 DLL 来做到这一点。但是为了在有或没有 A 程序的情况下运行特殊任务,我想将 wxW.. 东西放在一个 exe (B) 中,这些 exe 应该处理来自 A 程序的相同数据。据我所知,每个 *.exe 都有自己的进程,所以我不能共享相同的指针地址。

我可以在其中一个 DLL 中放入一些共享数据 block 。

#pragma data_seg("SHARED")  
CClassA *g_ClassAPointer=NULL;
#pragma data_seg()
#pragma comment(linker, "/section:SHARED,RWS")

如果 A 正在运行并启动 B,我可以获得指针 g_ClassAPointer 和 A 内的地址。有没有办法获取地址或获取偏移量以到达 B 内的该地址?

提前致谢

豪伊

顺便说一句:我们还想使用 wxWidgets 越来越多地淡化所有 MFC 内容以跨平台代码,否则我会坚持使用 MFC 或使用 wxW - 包装器 *.exe 中的 DLL。

最佳答案

您正在寻找共享内存,通常的创建方式是通过 CreateFileMapping。这可以创建由命名文件支持或由页面文件支持的共享内存。 (由 GlobalAlloc 分配的内存也由分页文件支持,所以这并不罕见)。

无论哪种情况,CreateFileMapping 中的内存块都会被命名,因此另一个进程可以通过调用具有相同名称的 OpenFileMapping 来访问共享内存块。

请记住,共享内存块可能驻留在内存中的不同偏移处。此外,如果将 CClassA 放在共享内存中,则没有自动机制来确保 CClassA 中的所有指针都指向同一个共享内存块。例如。将 std::string 或 MFC CString 放入共享内存中不太可能实现您的预​​期。

关于c++ - 两个应用程序 (*.exe) 使用来自数据 DLL 的相同数据指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16030062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com