#using ディレクティブ (C++)
/clr でコンパイルされたプログラムにメタデータをインポートします。
#using file [as_friend]
パラメーター
file
.dll.exeMSIL。.netmoduleまたは .obj。次に例を示します。#using <MyComponent.dll>
for
すべて file がアクセス可能になっていることを指定します。詳細については、「フレンド アセンブリ (C++)」を参照してください。
解説
file はマネージ データにはインポート構造体を管理する Microsoft Intermediate Language (MSIL) である場合があります。.dll ファイルがアセンブリ マニフェストがある場合はマニフェストで参照されるすべての .dll をインポートした場合はアセンブリ参照としてメタデータの一覧 のファイルビルドアセンブリ 。
現在のアセンブリ () アプリケーションでモジュールのタイプ情報を使用しようとする file がモジュール (の場合) file がアセンブリが含まれているモジュールが含まれるアセンブリであることを示すためのオプションがあります。; /ASSEMBLYMODULE を使用します。モジュールの型はアセンブリを参照するすべてのアプリケーションで使用できます。
#using を使用する代わりに /FU コンパイラ オプションです。
#using に渡されるすべてのアセンブリは /clr:safe または /clr:pureまたは他の Visual Studio コンパイラでもコンパイルされます (Visual Basic または C#)。/clr を指定してコンパイルされた .exe のアセンブリからメタデータをインポートしようとするとファイルの読み込み例外が発生します。
[!メモ]
#using で参照されているコンポーネント予期しない結果になるクライアント アプリケーションが発生するとコンパイル時にインポートされるファイルの異なるバージョンで実行できます。
モジュールではなくアセンブリ内の型をコンパイラで認識するには、型の解決を強制する必要があります。型の解決を実行するには、たとえば、型のインスタンスを定義します。アセンブリの型名を解決する方法は他にもあります。たとえば、アセンブリの型を継承すると、コンパイラで型名が認識されます。
メタデータをインポートすると __declspec(thread) を使用したソース・コードからスレッドのセマンティクス保持されるメタデータに基づいています。たとえば**__declspec(thread)** で宣言され.NET Framework 共通言語ランタイムのビルドであるプログラムにコンパイルし#using してインポートした変数に対して変数の __declspec(thread) のセマンティクスはありません。
#using によって参照されているファイルのインポート後の型 (ネイティブおよびマネージ) の両方宣言内のシグネチャとして使用できるようコンパイラのネイティブ型は異なります。
mscorlib.dll が自動的に /clr とコンパイル時に参照されます。
LIBPATH 環境変数はコンパイラが #using に渡されたファイル名を解決するときに検索するディレクトリを指定します。
コンパイラは次のパスに沿って参照を検索します :
#using のステートメントで指定されたパス。
現在のフォルダー。
.NET Framework のシステム ディレクトリ。
/AI のコンパイラ オプションで追加したディレクトリ。
LIBPATH 環境変数のディレクトリ。
使用例
アセンブリ (c) をビルドして自体が別のアセンブリ () を参照するアセンブリ (b) を参照する場合は明示的に型 A's の 1 C を使用するアセンブリ A を明示的に参照する必要はありません。
// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};
// using_assembly_B.cpp
// compile with: /clr /LD
#using "using_assembly_A.dll"
public ref class B {
public:
void Test(A a) {}
void Test() {}
};
次の例ではプログラムが using_assembly_A.cpp で定義された型は一切使用しないため using_assembly_A.dll を参照しないようコンパイラ エラーは表示されません。
// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
B b;
b.Test();
}