在c ++中使用带64位dll的32位dll

时间:2014-11-10 22:23:23

标签: c++ 32bit-64bit

我有程序,我希望看到使用64位的好处,但我有一个32位的第三方DLL。

我可以将程序升级到64位还是一无所有?

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

1 个答案:

答案 0 :(得分:1)

让我们说你的DLL导出API void foo();一种迂回方式从64位应用程序调用这个32位函数就是创建一个使用IPC封装这个API的新EXE。

所以你有:

  1. 使用有问题的API加载32位DLL的32位EXE。
  2. 复制32位DLL API的64位DLL,即它具有void foo();
  3. 您的客户端代码(可能是EXE或其他DLL)链接到步骤2中的64位DLL,可以调用foo()但是它喜欢。
  4. 现在对于魔术部分,来自2的DLL将从1启动EXE,然后它将使用IPC(可能是命名管道)与该EXE通信并将调用转发给它并返回其结果。

    所以你有你的应用程序 - > 64位包装器dll - >命名管道 - > 32位包装器应用程序 - > 32位dll。以这样的方式抽象调用foo(); API就像你的应用程序32位本身一样。显然这是一个很难实现的,所以如果你发现这样做不那么费力,那么考虑重写32位API。