VS2008 を使用して C# で記述された小さな WPF アプリケーションがあります。ある特定のタスクについて、C++/CLI コードを使用したいと考えています (ネイティブの相互運用性が必要なため)。
C++/CLI コードを DLL としてコンパイルし、C# アプリからこれを参照できることはわかっていますが、問題のコードがかなり小さい場合、それはばかげているように思えます。それらを同じファイルにビルドしたい。(そして、実行時に DLL を抽出せずに。)
いくつかのコマンドライン コンパイラ マジック (ここに示されているものと同様) を介して、別のアプリケーション用に C++ コードを C# DLL にコンパイルするときに、これを正常にコンパイルして動作させることができました。
ただし、C++ コードを C# EXE にコンパイルするために同じことを試みると、コンパイルとリンクは正常に機能しますが、結果の実行可能ファイルを実行しようとすると、次のエラーが発生します。
プロジェクトの実行中にエラーが発生しました: 検証不可能な実行可能ファイルを修正プログラムと共に読み込もうとしています (2 つ以上のセクションまたは TLS セクションを含む IAT。) (HRESULT からの例外: 0x80131019)
コマンドラインは基本的に次のとおりです。
cl /nologo /clr /Zi /MDd /DWIN32 /D_LIB /FUmanaged.dll /c interface.cpp /FoDebug\interface.obj
csc /target:module /addmodule:Debug\interface.obj /r:managed.dll App.cs MainWindow.xaml.cs Debug\MainWindow.xaml.g.cs Properties\AssemblyInfo.cs /out:Debug\Program.netmodule
link /entry:TestApp.App.Main /subsystem:Windows /clrimagetype:ijw /debug /ltcg /manifest /out:Debug\TestApp.exe Debug\App.netmodule Debug\interface.obj
それがうまくいかないアイデアはありますか?(managed.dll は、コードの両方の部分に必要な共通の定義を含む個別の C# DLL です。これを個別に保持しても問題ありません。目前の問題とは実際には関係ありませんが、完全を期すために含めました。)
動作中の DLL バージョンのリンク コマンド ラインは/dll
、/entry: /subsystem: /clrimagetype:
. 私はそれらのそれぞれを削除しようとしましたが、最後のものだけがオプションのようで、削除しても役に立ちませんでした。