2010-03-15 110 views
16

我想向我們的VS2010RC C#解決方案添加一個VC6 COM DLL。使用VC6工具編譯DLL以創建x86版本,並使用VC7跨平臺工具編譯生成VC7 DLL。Visual Studio 2010 64位COM互操作問題

只要消費的C#項目的平臺設置爲x86,組件的x86版本就可以正常工作。無論x64還是x86的x86版本都是實際註冊的。它適用於兩者。如果平臺設置爲「任何CPU」,我會在Interop.<name>.dll的負載上收到BadImageFormatException

至於x64版本,我甚至無法獲得要構建的項目。我收到的tlbimp錯誤:

TlbImp : error TI0000: A single valid machine type compatible with the input type library must be specified.

有沒有人看過這個問題?

編輯:

我已經做了很多挖掘到這個問題,並認爲這可能是一個Visual Studio錯誤。我有一個乾淨的解決方案。我使用與語言不可知的「任何CPU」選擇了我的COM程序集。生成的Interop DLL的進程體系結構是x86而不是MSIL。

可能需要手工製作Interop才能使其正常工作。

如果有人有另一個建議讓我知道。

回答

47

這個問題可以通過打開的csproj文件並添加以下節點,以任何的方式來解決(配置)|任何CPU'節點所缺少的:

<PlatformTarget>AnyCPU</PlatformTarget> 

如果此節點不存在TlbImp將默認爲x86並導致問題。

+0

我希望我可以多投這幾次。很明顯,這個錯誤在回顧過程中意味着什麼,但乍看起來令人費解。 – xcud 2011-08-16 21:40:16

+0

它工作,但我需要在CSProj文件中添加單獨的 項目,以便VS實際開始使用此設置。 – Roboblob 2012-07-05 11:21:45