通过COM从32位应用程序调用x64程序集

时间:2011-11-19 11:51:59

标签: c# .net com .net-assembly

简短的问题:是否可能(当然是在x64操作系统上)?如果不是,为什么呢?

我为excel 32开发了一个c#插件dll。

在x86中编译时效果很好。

在x64中编译时,COM调用失败。

我是否需要64位版本的Excel?

我认为COM不可能编译架构,并且可以在不同技术和不同架构下开发的dll之间进行通信,但我猜后者是错误的。

我猜一个x64位dll显然不能通过COM(或其他)从32位应用程序调用。

1 个答案:

答案 0 :(得分:9)

COM支持两种服务器,进程内和进程外。 Office扩展是进程内组件,是一个加载到进程中的DLL。 32位进程的一个硬性规则是它们无法加载64位DLL。反过来说。这是由注册表本身强制执行的,32位进程无法直接访问64位COM服务器的注册信息。它们被重定向到HKLM / Software / Wow6432Node键。换句话说,他们甚至不能看到错误位数的组件。

进程外组件没有这个限制,它们在自己的进程中运行。 COM使用RPC和论文对比特差异进行编组。这也是使进程内64位服务器与32位主机一起工作的一种方法,您可以在代理进程中运行该组件。由于需要编组和上下文切换,因此过程调用 比进程内调用更加昂贵,因此开始使用并且几乎从不值得麻烦。它不仅要贵一点,它的速度也要慢一倍,主要是因为进程内函数调用速度非常快。它只用于保持传统的32位服务器使用64位程序。看看COM +托管,如果你想尝试这个,我不太了解它。