通过COM在64位进程中使用32位DLL

时间:2011-12-28 19:30:40

标签: c++ com 32bit-64bit

所以前段时间我正在调查一个我知道很快会出现的问题。我们有一个DLL链接到某个库的32位版本。我们没有这个库的x64版本,我们在替换它时没有实际的选择。

当我执行这个初步调查时,我发现了一篇或两篇描述64位进程可以通过COM"服务器"来利用32位DLL(Windows)的方法。不幸的是,我丢失了我保存的链接,现在我已经搜索了一个多小时而没有运气。

有人在这里熟悉我描述的过程吗?我不能为我的生活记住我用来在搜索中获得正确结果的神奇咒语,当然,现在是实施时间。提前感谢您提供的任何帮助,我会继续寻找。

3 个答案:

答案 0 :(得分:5)

这可能还不够,但可能会让您入门:Process Interoperability

  

在64位Windows上,进程外32位COM服务器可以与64位客户端通信,进程外64位COM服务器可以与32位客户端通信。 因此,如果您有一个不支持COM的32位DLL,您可以将其包装在进程外的COM服务器中,并使用COM来封送来自64位进程的调用。

Accessing 32-bit DLLs from 64-bit code

  

如果您有无法重写的32位DLL,则将32位Windows应用程序迁移到64位计算机可能会有问题。 Mike Becker向您展示了如何使用内置的IPC机制从64位代码访问32位DLL ...

答案 1 :(得分:3)

Client of Out-of-process Local Server是运行COM进程的示例。如果您正在运行com服务器,那么您的客户端可能是64位,服务器是32位。

答案 2 :(得分:1)

您可以创建一个始终以32位运行的COM exe或服务。在这个32位exe中,你可以访问32位dll链接到32位版本的库。

以下框图说明了基础知识

请查看此链接了解详情:

http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/#more-355