从64位应用程序使用32位进程内COM服务器的简单方法是什么?

问题描述:

我有一个32位本地C++ ATL进程内COM服务器,它依赖于一大组传统的32位库。我需要从64位应用程序中使用它,并尽可能进行最小的更改。从64位应用程序使用32位进程内COM服务器的简单方法是什么?

一种选择是将它放到COM +应用程序中。什么是其他简单的选择?

创建一个加载inproc服务器DLL,但充当本地服务器的32位帮助应用程序。

编译64位代理存根代码。

然后,当64位应用程序尝试加载您的ActiveX,而不是使用32位inproc(无法加载)时,它将加载32位本地服务器 - 一个单独的进程 - 这是合法的。

从IDL自动生成代码的代理存根应该为64位构建就好了。

+0

这听起来像很多工作。我需要创建一个单独的.exe,找出如何注册它和注册表中的代理/存根。 – sharptooth 2009-11-09 11:33:34

+0

这就是所有标准的东西。 另一种方法是重构你的COM DLL来构建64位的工作。 您无法将32位DLL加载到64位进程中,因此了解如何在32位进程中托管它是真正避免将控件重建为64位控制的唯一方法。 – 2009-11-09 11:55:50

+0

是的,我明白这一点。与只是投入到COM +相比,您提出的解决方案听起来有很多工作 - 这只需点击几下鼠标。 – sharptooth 2009-11-09 12:14:08