2011-11-19 118 views
5

简短的问题:是否有可能(当然是在x64操作系统上)?如果不是,为什么呢?通过COM从32位应用程序调用x64程序集

我已经开发了一个C#DLL插件为Excel 32

当编译x86的正常工作。

在x64中编译COM调用失败。

我需要一个64位版本的Excel吗?

我以为COM不知道编译体系结构,并在不同技术和不同体系结构开发的DLL之间进行通信,但我想后者是错误的。

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

+0

您可能需要一个64位系统(至少内核)来运行64位代码。 –

+0

@BasileStarynkevitch当然可以。我在帖子中添加了精度 –

+0

您是否已经尝试编译AnyCPU? – Filburt

回答

9

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

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

+0

非常感谢,伙计。这正是我正在寻找的那种清晰的确认。而且您的精确度更高,这对于我们来说非常宝贵,它使我们有时间尝试做出糟糕的性能结果。所以,如果我真的想坚持我的x64框架,我想需要一个Excel的x64分布。 –

相关问题