如何在 .exe 和 .dll 之间正确共享对象?

Posted

技术标签:

【中文标题】如何在 .exe 和 .dll 之间正确共享对象?【英文标题】:How to correctly share an object between .exe and .dll? 【发布时间】:2021-03-23 17:56:00 【问题描述】:

我必须访问 .exe 中的对象,该对象创建并存储在 .dll 的地址空间中。有很多答案提到 IPC 作为解决方案,但我不确定它如何提供帮助。 IMO,IPC只是进程之间的消息“聊天”,可以通过在调用方(.exe)重新创建它们来共享原语。我无法重新创建该对象,因为它是由 .dll 端的某个第三方库创建的,如果我共享原始内存并且只是 reinterpret_cast 它,它可能是一个无效对象。我也不能共享指向该对象的指针,因为它只会共享虚拟内存地址,这在调用方可能是垃圾。我不想静态链接我的库。我该怎么办?

【问题讨论】:

"_ 我也不能共享指向该对象的指针,因为它只会共享虚拟内存地址,而这在调用方可能是垃圾。_" 为什么会这样? @underscore_d 是的,你是对的。我真的需要读一些关于操作系统中内存组织的书 【参考方案1】:

IPC 是一个广义的概括性术语,涵盖所有进程间通信,而不仅仅是共享内存(顺便说一句,这与“聊天”完全不同)。

幸运的是,您不需要任何类型的 IPC,因为您没有不同的流程。 dll和exe共享相同的地址空间,所以只需返回指向构造对象的指针并直接使用,无需重新解释。

【讨论】:

以上是关于如何在 .exe 和 .dll 之间正确共享对象?的主要内容,如果未能解决你的问题,请参考以下文章

dll与exe之间怎么共享数据

在 DLL 之间共享数据

如何从 dll 正确返回 std::list

如何在 2 个进程之间共享 COM 对象?

用户 DLL/EXE 中的堆分配失败

C语言怎么使用动态链接库,如何创建?(高手进)