gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:33:52 24 4
gpt4 key购买 nike

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

我为 excel 32 开发了一个 c# 插件 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 位主机一起工作的一种方法,您可以在代理进程中运行该组件。这很难开始,而且几乎不值得麻烦,由于需要编码和上下文切换,进程外调用比进程内调用成本高。不仅成本更高,而且速度慢了大约 10,000 倍,这主要是因为进程内函数调用非常快。它仅用于保持遗留 32 位服务器与 64 位程序一起工作。如果你想尝试这个,看看 COM+ 托管,我对此了解不多。

关于c# - 从 32 位应用程序通过 COM 调用 x64 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8193857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com