【问题标题】:.Net COM interop with 32 and 64 bit platforms.Net COM 与 32 位和 64 位平台的互操作
【发布时间】:2011-09-10 18:03:11
【问题描述】:

我正在使用第三方 COM 组件,供应商提供了 32 位和 64 位版本。我想为“任何 cpu”构建我的 .NET 应用程序,如果进程是 32 位,则让它调用 32 位 COM 组件,或者在 64 位模式下调用 64 位组件。

谁能告诉我任何有用的资源来描述这个过程是如何工作的?如果我注册了正确的 COM 组件,它会不会发生魔法?

谢谢

安迪

【问题讨论】:

标签: c# .net interop com-interop 32bit-64bit


【解决方案1】:

AFAICT COM 是(一直是)二进制标准接口。

它的定义不依赖于字节顺序、字长或其他依赖于体系结构的细节。用纯 C 代码编写一个符合所有这些的 COM 组件是完全可能的(对于简单的接口,甚至没有那么困难)。

某些人(Don Box、Craig Brockschmidt,我有一种感觉,我忘记了最著名的一个……糟糕的记性)以撰写有关如何以这种方式实现 COM 的书籍而闻名。

如果您需要任何确认,您可以确认 MIDL 的输出不依赖于您的平台特征

【讨论】:

    【解决方案2】:
    【解决方案3】:

    32 位进程将加载 32 位 COM 服务器,而 64 位进程将加载 64 位 COM 服务器。换句话说,只要你在目标机器上安装了正确的 COM 服务器,你就不需要做任何事情来让它正常工作。

    【讨论】:

    • 谢谢,我认为这在一般情况下是正确的。但是,对于我使用的组件,供应商似乎为 64 位组件使用了不同的 ProgId(因此在 .Net 互操作中生成了不同的命名空间)。无论如何,我能够同时添加两个 DLL 引用,并根据 Sizeof(IntPtr) 放入一个开关来调用一个或另一个。不理想,但有效
    • 嗯,我对ProgId 很模糊,所以我不想发表评论!
    【解决方案4】:

    使用 32 位 COM dll。

    如果您的应用程序类型是 Web,请参考您的 32 位 COM dll 并部署该应用程序。 在 IIS 中设置 'Enable 32bit Application = TRUE.

    在 Windows 应用程序中,只需引用 32 位 dll 并使用“任何 CPU”构建应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 2013-08-19
      • 2011-01-27
      相关资源
      最近更新 更多