gpt4 book ai didi

.net - 从 x64 .NET 访问 x86 COM

转载 作者:行者123 更新时间:2023-12-03 10:39:25 25 4
gpt4 key购买 nike

我有一个 x64 服务器,因为我的库被编译为 AnyCPU,所以在 x64 下运行。我们需要访问在 x86 下注册的 COM 组件。我对 COM 知之甚少,我的谷歌搜索无处可去。

问题:对于 COM 组件,我可以使用从 x64 返回到 x86 的符号注册表链接吗?我是否也需要在 x64 下注册 COM 组件?我可以(这里有任何声明......)吗?

谢谢。

最佳答案

如果组件正在运行 x64-native,则无法在进程内加载 32 位 COM 服务器,因为这是错误的进程类型。有几种可能的解决方案:

  • 如果可以的话,构建一个 64 位版本的 COM 代码(当然它会在 64 位注册表中注册自己)。这是最干净的解决方案,但如果您没有 COM 服务器的代码,则可能无法实现。
  • 将 .NET 组件作为 32 位 x86 而不是 x64 运行。我假设你已经考虑过并出于某种原因拒绝了这个。
  • 使用 COM surrogate 在进程外托管 COM 组件DLLhost.exe。这将使对 COM 服务器的调用变得非常非常慢(它们现在将处理 Windows 消息而不是 native 函数调用),但在其他方面是透明的(您不必做任何特殊的事情)。

    如果服务器需要自定义代理 stub 而不是使用普通的 oleaut32 代理 stub (尽管非常罕见),这可能不是一个选项,因为不会有 64 位版本的代理可用。只要能用普通的OLE编码,就可以register it for surrogate activation .
  • 关于.net - 从 x64 .NET 访问 x86 COM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/359331/

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