1

简短的 2 个问题,我在阅读了几个主题/页面后找不到明确的答案。

  1. 如果我将一些互操作 dll 复制到我的计算机,它会构建到 AnyCpu(使用 .net 反射器检查),如果我想在 64 位的应用程序构建中引用它(现在我得到一个例外) - 将其注册为 64 位是足够了(使用 regasm)——或者我们没有注册互操作——只有 COM?

  2. 如果我有互操作 dll - 我可以获得创建此互操作的原始 COM(这对于创建另一个互操作(例如,对于 64 位环境)很有用)?

编辑:在@David 回复之后,我又检查了一个选项,出乎意料地它起作用了,但现在我不确定这对这个讨论和解决方案意味着什么。任何人都可以帮助解决这个问题吗?

我做了什么:我按照这里的说明进行操作,现在来自 COM 的对象确实适用于我的 64 位应用程序!对所有对象(数百个在互操作中)手动执行此操作可能会很棘手 - 这是处理我的互操作的正确方法吗?

问候,乔特贝克

4

1 回答 1

2

COM 服务器 (DLL) 是本机代码,因此它们不能跨越位数边界,即 32 位到 64 位。您的 .NET 代码需要编译为 x86(好吧,至少启动代码是这样)才能有一个 32 位进程来加载 COM DLL(除非 COM DLL 本身是 64 位的,在这种情况下您的启动代码需要编译为 x64)。

互操作 DLL 只是一个 .NET 程序集,其中包含调用 COM 对象上的方法的胶水。知道互操作 DLL 用于哪个 COM DLL 将不允许您生成具有不同位数的工作互操作 DLL。

于 2013-01-02T20:43:29.497 回答