我正在寻找一种方法来协调同一进程中的 DLL,以便在它们之间提供数据共享机制。目标是为所有 DLL 提供相同的共享代码,并让它们以这样一种方式进行协调,即由主程序加载的第一个将充当共享项的管理器,而其他人将使用此管理器。我无法修改主应用程序,因此不可能设置管理器并与其他 DLL 共享其内存地址。使用此机制的 DLL 集可能会有所不同,因此我不能明确假设其中一个将被加载。
我考虑的一种解决方案是将内存地址添加到进程的环境变量中。第一个 DLL 会看到环境变量尚未设置,创建管理器对象并将变量设置为其地址。其他 DLL 会看到该变量并从中创建一个指向管理器对象的指针。
这接近我想要的,但它似乎有点粗糙,因为不能保证环境变量由于某种原因尚未设置,并且 SetEnvironmentVariable/GetEnvironmentVariable 可能因各种原因而失败。
有没有更好的方法来处理这个问题?我正在寻找一种在进程上下文中存储和检索命名指针的方法,但如果您有更好的解决方案来解决让 DLL 协作的潜在问题,我也很乐意接受。
最佳答案
如何创建一个 named shared memory ?
这将允许您共享一部分内存,而无需获得在进程上下文中有效的地址。第一个加载的 DLL 创建共享内存,下一个 DLL 可以直接访问内存,您可以在此基础上构建自己的消息传递 API。
关于c - 在没有宿主程序帮助的情况下,如何在同一个进程中协调不同的 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181067/