如何处理32位和64位环境之间的Interops?

时间:2013-01-02 20:38:44

标签: .net com interop registry 32bit-64bit

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

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

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

  3. 编辑:在@David响应之后,我又检查了一个选项,意外地说它有效但现在我不确定这对于这个讨论和解决方案意味着什么。任何人都可以帮忙解决这个问题吗?

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

    此致 jotbek

1 个答案:

答案 0 :(得分:2)

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

互操作DLL只是一个.NET程序集,包含调用COM对象上方法的粘合剂。知道互操作DLL所使用的COM DLL将不允许您生成具有不同位数的工作互操作DLL。