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 文件中添加单独的以上是关于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 位版本没有目标体系结构错误