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

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

我为excel 32开发了ac#plugin dll。

在x86中编译时,它工作正常。

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

我需要64位版本的Excel吗?

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

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

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

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