我正在尝试将一个VC6 COM DLL添加到我们的VS2010RC C#解决方案中。该DLL使用VC6工具编译为x86版本,并使用VC7跨平台工具编译为VC7 DLL。
只要使用C#项目的平台设置为x86,就可以正常使用程序集的x86版本。无论实际上注册的是x64还是x86版本的DLL,它都可以正常工作。如果平台设置为“Any CPU”,则在加载Interop.<name>.dll
时会收到BadImageFormatException
错误。
至于x64版本,我甚至无法让项目构建。我收到了tlbimp错误:
TlbImp:错误TI0000:必须指定与输入类型库兼容的单个有效机器类型。
有人见过这个问题吗?
编辑:
我对此问题进行了更多的挖掘,认为这可能是Visual Studio的一个bug。我有一个干净的解决方案。我选择语言不可知的“Any CPU”导入我的COM程序集。生成的Interop DLL的进程架构是x86而不是MSIL。
暂时可能需要手动创建Interop才能使其正常工作。
如果有其他建议,请告诉我。