【问题标题】:Using 32bit dlls with 64bit dlls in c++在 C++ 中使用 32 位 dll 和 64 位 dll
【发布时间】:2015-01-07 08:46:45
【问题描述】:

我有一个程序,我想看看使用 64 位的好处,但是我有一个 32 位的第 3 方 dll。

我可以将我的程序升级到 64 位吗?或者它必须什么都没有?

如果可以使用混合 dll 运行,那么缺点是什么?

【问题讨论】:

标签: c++ 32bit-64bit


【解决方案1】:

假设您的 DLL 导出 API void foo(); 从 64 位应用程序调用此 32 位函数的一种迂回方法是创建一个使用 IPC 包装此 API 的新 EXE。

所以你有:

  1. 一个 32 位 EXE,它使用有问题的 API 加载 32 位 DLL。
  2. 复制 32 位 DLL API 的 64 位 DLL,即它有一个 void foo();
  3. 您的客户端代码(可能是 EXE 或其他 DLL)链接到第 2 步中的 64 位 DLL,可以随意调用 foo()

现在对于神奇的部分,来自 2. 的 DLL 将从 1 启动 EXE,然后它将使用 IPC(可能是命名管道)与该 EXE 通信并将调用转发给它并返回其结果。

所以你的应用程序 -> 64 位包装器 dll -> 命名管道 -> 32 位包装器应用程序 -> 32 位 dll。以调用foo(); API 的方式进行抽象,就像您的应用程序本身是 32 位一样。显然这实现起来很痛苦,所以如果您发现这样更省力,请考虑重写 32 位 API。

【讨论】:

  • 在 windows 上 wm_copydata 可用于 32/64 通信。正如回答的那样,这是可能的,但工作量很大。
  • 是的,他没有指定平台,所以不能确定。还有为什么投反对票?
猜你喜欢
  • 2013-06-08
  • 2012-06-06
  • 2022-01-20
  • 2012-05-12
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 2011-08-08
相关资源
最近更新 更多