c - 在没有宿主程序帮助的情况下,如何在同一个进程中协调不同的 DLL?

标签 c windows dll

我正在寻找一种方法来协调同一进程中的 DLL,以便在它们之间提供数据共享机制。目标是为所有 DLL 提供相同的共享代码,并让它们以这样一种方式进行协调,即由主程序加载的第一个将充当共享项的管理器,而其他人将使用此管理器。我无法修改主应用程序,因此不可能设置管理器并与其他 DLL 共享其内存地址。使用此机制的 DLL 集可能会有所不同,因此我不能明确假设其中一个将被加载。

我考虑的一种解决方案是将内存地址添加到进程的环境变量中。第一个 DLL 会看到环境变量尚未设置,创建管理器对象并将变量设置为其地址。其他 DLL 会看到该变量并从中创建一个指向管理器对象的指针。

这接近我想要的,但它似乎有点粗糙,因为不能保证环境变量由于某种原因尚未设置,并且 SetEnvironmentVariable/GetEnvironmentVariable 可能因各种原因而失败。

有没有更好的方法来处理这个问题?我正在寻找一种在进程上下文中存储和检索命名指针的方法,但如果您有更好的解决方案来解决让 DLL 协作的潜在问题,我也很乐意接受。

最佳答案

如何创建一个 named shared memory

这将允许您共享一部分内存,而无需获得在进程上下文中有效的地址。第一个加载的 DLL 创建共享内存,下一个 DLL 可以直接访问内存,您可以在此基础上构建自己的消息传递 API。

关于c - 在没有宿主程序帮助的情况下,如何在同一个进程中协调不同的 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181067/

相关文章:

c++ - 在 LabVIEW 中将复数传入和传出 DLL

c - 替换 C 数据中的字节

c++ - 调用DLL函数问题

c# - 是否可以在 Qt 中使用 c# dll?

c# - .NET EXE 和 DLL 之间的堆栈/堆差异

windows - Windows上的Qt dll部署

c++ - 想在某个未知系统上运行程序

c - 当我使用 int 或 unsigned long long 我的程序崩溃时,什么数据类型可用于数组索引 0 到 4000000

c++ - 在 C++ 中匹配 '|'(垂直线)字符

windows - 批处理文件: Processing files in alphbetical (Numerical maybe>) Order