2つのモジュールで構成される.NETアセンブリを作成する必要があります。1つはネイティブコードを含む内部(DLL内)、もう1つは外部(.netmoduleファイル内)です。
ネイティブ部分を除いて、これは簡単に実行できます。
C#のコンパイラはこれを行うことができます(これは私が望むものですが、ネイティブコードを使用します):
csc /t:library /out:foobar.dll foo.cs /out:bar.netmodule bar.cs
-foobar.dll (contains assembly manifest and foo's IL)
-internal module foobar.dll (contains foo's IL)
-external module bar.netmodule (contains bar's IL)
C ++コンパイラ/リンカは、すべてを1つの内部モジュールに入れます。
cl /clr /LD foo.cpp /link bar.netmodule /LTCG
OR link /out:foobar.dll foo.netmodule bar.netmodule
-foo(bar).dll (contains IL for both foo and bar, as well as assembly manifest)
Assembly Linkerは、外部モジュールのみを実行します。
al /out:foobar.dll foo.netmodule bar.netmodule
-foobar.dll (only contains manifest)
-external module foo.netmodule (contains foo's IL)
-external module bar.netmodule (contains bar's IL)
ILを手動で調整しようとしましたが、ILDASMとILASMはネイティブコードをラウンドトリップできないようです。
ildasm foobar.dll /out=foobar.il
ilasm /dll foobar.il
-lots of errors
明確にするために、私が欲しいのはこれです:
-foobar.dll (contains assembly manifest and foo's IL AND NATIVE CODE)
-internal module foobar.dll (contains foo's IL AND NATIVE CODE)
-external module bar.netmodule (contains bar's IL)