Visual Studio 2010 64 位 COM 互操作问题

Posted

技术标签:

【中文标题】Visual Studio 2010 64 位 COM 互操作问题【英文标题】:Visual Studio 2010 64-bit COM Interop Issue 【发布时间】:2011-01-27 21:00:04 【问题描述】:

我正在尝试将 VC6 COM DLL 添加到我们的 VS2010RC C# 解决方案中。 DLL使用VC6工具编译生成x86版本,使用VC7跨平台工具编译生成VC7 DLL。

只要将使用 C# 项目的平台设置为 x86,x86 版本的程序集就可以正常工作。 DLL 的 x64 或 x86 版本是否实际注册并不重要。它适用于两者。如果平台设置为“任何 CPU”,我会在 Interop.<name>.dll 的负载上收到 BadImageFormatException

至于 x64 版本,我什至无法构建项目。我收到 tlbimp 错误:

TlbImp:错误 TI0000:与 必须指定输入类型库。

有人看过这个问题吗?

编辑:

我对这个问题做了更多的研究,并认为这可能是一个 Visual Studio 错误。我有一个干净的解决方案。我选择了与语言无关的“任何 CPU”来引入我的 COM 程序集。生成的 Interop DLL 的进程体系结构是 x86 而不是 MSIL。

现在可能必须手动制作 Interop 才能使其正常工作。

如果有人有其他建议,请告诉我。

【问题讨论】:

【参考方案1】:

可以通过打开 CSProj 文件并将以下节点添加到任何缺少它的“(配置)|任何 CPU”节点来解决此问题:

<PlatformTarget>AnyCPU</PlatformTarget>

如果此节点不存在,TlbImp 将默认为 x86 并导致问题。

【讨论】:

我希望我能再投票几次。回想起来,这个错误的含义很明显,但乍一看令人困惑。 它有效,但我需要在 CSProj 文件中添加单独的 项目才能启动 VS实际使用此设置。

以上是关于Visual Studio 2010 64 位 COM 互操作问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在/使用 Visual Studio 2010 中为 64 位 Windows 构建 libcurl?

Visual Studio 2010 WebDev WebServer (Cassini) 64 位兼容吗?

Visual Studio Web Developer 2010 Express 和 64 位

Visual Studio 2010 IDE 64 位版本没有目标体系结构错误

如何设置 Visual Studio 2010 项目来为 Slickedit 17 构建 64 位扩展 dll?

如何用pcl配置visual studio 2010