次の方法で共有


.netmodule 入力ファイルの形式の選択

(/clr を使ってコンパイルされた) MSIL .obj ファイルは、.netmodule ファイルとしても使用できます。 .obj ファイルには、メタデータとネイティブ シンボルが含まれます。 .netmodule にはメタデータのみが含まれます。

/addmodule コンパイラ オプションを使って、他の任意の Visual Studio コンパイラに MSIL .obj ファイルを渡すことができます (ただし、.obj ファイルは生成されるアセンブリの一部になり、アセンブリに同梱される必要があることに注意してください)。 たとえば、Visual C# と Visual Basic には、/addmodule コンパイラ オプションがあります。

Note

ほとんどの場合、.net モジュールを作成したコンパイルからリンカーに .obj ファイルを渡す必要があります。 .dll または .netmodule MSIL モジュール ファイルをリンカーに渡すと、LNK1107 が発生する可能性があります。

.obj ファイルとそれに関連付けられている .h ファイル (ソース内の #include を通じて参照します) を使うと、C++ アプリケーションでモジュール内のネイティブ型を使用できます。一方、.netmodule ファイルでは、C++ アプリケーションで使用できるのはマネージド型だけです。 #using に .obj ファイルを渡そうとすると、ネイティブ型に関する情報は使用できなくなります。代わりに、.obj ファイルの .h ファイルを #include してください。

その他の Visual Studio コンパイラでは、モジュールからのマネージド型のみを使用できます。

MSVC リンカーへのモジュール入力として .netmodule ファイルと .obj ファイルのどちらを使う必要があるか判断するには、以下に従ってください。

  • Visual C++ 以外の Visual Studio コンパイラを使ってビルドする場合は、.netmodule を生成し、リンカーへの入力として .netmodule を使用します。

  • MSVC コンパイラを使ってモジュールを生成し、そのモジュールを使ってライブラリ以外のものをビルドする場合は、コンパイラによって生成される .obj ファイルをリンカーへのモジュール入力として使用します。入力として .netmodule ファイルを使用しないでください。

  • モジュールを使ってネイティブ (マネージドではない) ライブラリをビルドする場合は、リンカーへのモジュール入力として .obj ファイルを使用し、.lib ライブラリ ファイルを生成します。

  • モジュールを使ってマネージド ライブラリをビルドし、リンカーへのすべてのモジュール入力を検証可能にする (/clr:safe を指定して生成する) 場合は、リンカーへのモジュール入力として .obj ファイルを使用し、.dll (アセンブリ) または .netmodule (モジュール) ライブラリ ファイルを生成します。

  • モジュールを使ってマネージド ライブラリをビルドし、リンカーへの 1 つ以上のモジュール入力を /clr を指定して生成する場合は、リンカーへのモジュール入力として .obj ファイルを使用し、.dll (アセンブリ) を生成します。 ライブラリからマネージド型を公開し、さらに C++ アプリケーションでライブラリのネイティブ型を使用する必要がある場合は、ライブラリのコンポーネント モジュールの .obj ファイルでライブラリを構成します (ソース コードから #include で参照できるように、各モジュールの .h ファイルも配布することをお勧めします)。

関連項目

.netmodule ファイル (リンカー入力)