Visual Studio 2010の64ビットCOM相互運用機能の問題
-
20-09-2019 - |
質問
私は、私たちのVS2010RC C#ソリューションにVC6 COM DLLを追加しようとしています。 DLLは、x86バージョンを作成するために、VC6のツールでコンパイルされたとVC7のDLLを生成するために、VC7のクロスプラットフォーム・ツールでコンパイルされました。
アセンブリのx86バージョンは限りがかかりC#プロジェクトのプラットフォームはx86のに設定されているとして、正常に動作します。 x64またはDLLのx86バージョンが実際に登録されているかどうかは関係ありません。これは、両方で動作します。プラットフォームは「どれCPU」に設定されている場合は、私はBadImageFormatException
の負荷にInterop.<name>.dll
を受けます。
は、x64バージョンについては、私もプロジェクトをビルドするために取得することはできません。私はtlbimpとエラーを受け取ります:
tlbimpと:エラーTI0000:と互換性が単一の有効なマシン・タイプ 入力タイプライブラリを指定する必要があります。
誰もがこの問題を見ていますか?
EDITます:
私はこの問題を掘り下げるより多く行われ、これは、Visual Studioのバグかもしれないと思うしました。私はきれいな解決策を持っています。私が選択した言語に依存しない「任意のCPU」で私のCOMアセンブリをもたらします。得られた相互運用機能DLLのプロセスアーキテクチャはなくMSILよりx86のです。
この作業を取得するために今のところ手で相互運用をしなければならない可能性があります。
誰もが他の提案を持っている場合は、私に知らせます。
解決
この問題はCSProjファイルを開くとのいずれかに次のノードを追加することで解決することができます「(構成)|どれCPU」それが欠落しているノードます:
<PlatformTarget>AnyCPU</PlatformTarget>
このノードが存在しない場合は、tlbimpとは、x86と原因の問題がデフォルトになります。