#using ディレクティブ (C++/cli)#using directive (C++/CLI)

/Clrでコンパイルされたプログラムにメタデータをインポートします。Imports metadata into a program compiled with /clr.

構文Syntax

#using ファイル [as_friend]#using file [as_friend]

パラメーターParameters

拡張子file
MSIL .dll、.exe、.netmodule、または .obj。例えば以下のようにします。An MSIL .dll, .exe, .netmodule, or .obj. For example,

#using <MyComponent.dll>

as_friendas_friend
ファイル内のすべての型がアクセス可能であることを指定します。Specifies that all types in file are accessible. 詳細については、「 FriendC++Assemblies ()」を参照してください。For more information, see Friend Assemblies (C++).

RemarksRemarks

ファイルは、マネージデータとマネージコンストラクト用にインポートする Microsoft 中間言語 (MSIL) ファイルにすることができます。file can be a Microsoft intermediate language (MSIL) file that you import for its managed data and managed constructs. .Dll ファイルにアセンブリマニフェストが含まれている場合は、マニフェストで参照されているすべての .dll がインポートされ、作成しているアセンブリはメタデータ内のファイルをアセンブリ参照として一覧表示します。If a .dll file contains an assembly manifest, then all the .dlls referenced in the manifest are imported and the assembly you are building will list file in the metadata as an assembly reference.

ファイルにアセンブリが含まれていない場合 (ファイルがモジュールの場合)、現在の (アセンブリ) アプリケーションのモジュールからの型情報を使用しない場合は、そのモジュールがアセンブリの一部であることを示すオプションがあります。/assemblymoduleを使用します。If file does not contain an assembly (if file is a module) and if you do not intend to use type information from the module in the current (assembly) application, you have the option of just indicating that the module is part the assembly; use /ASSEMBLYMODULE. その場合、アセンブリを参照するすべてのアプリケーションで、そのモジュール内の型を使用できます。The types in the module would then be available to any application that referenced the assembly.

#Usingを使用する代わりに、 /fuコンパイラオプションを使用することもできます。An alternative to use #using is the /FU compiler option.

#usingに渡される .exe アセンブリは、.Net Visual Studio コンパイラ (Visual Basic またはビジュアルC#など) のいずれかを使用してコンパイルする必要があります。.exe assemblies passed to #using should be compiled by using one of the .NET Visual Studio compilers (Visual Basic or Visual C#, for example). /clr でコンパイルされた .exe アセンブリからメタデータをインポートしようとすると、ファイルの読み込み例外が発生します。Attempting to import metadata from an .exe assembly compiled with /clr will result in a file load exception.

注意

#Usingで参照されるコンポーネントは、コンパイル時にインポートされた別のバージョンのファイルを使用して実行できます。これにより、クライアントアプリケーションで予期しない結果が発生します。A component that is referenced with #using can be run with a different version of the file imported at compile time, causing a client application to give unexpected results.

コンパイラがアセンブリ (モジュールではありません) 内の型を認識できるようにするには、型を強制的に解決する必要があります。In order for the compiler to recognize a type in an assembly (not a module), it needs to be forced to resolve the type. これは、たとえば、型のインスタンスを定義することによって強制的に行うことができます。You can force it, for example, by defining an instance of the type. コンパイラのアセンブリの型名を解決する方法は他にもあります。There are other ways to resolve type names in an assembly for the compiler. たとえば、アセンブリ内の型から継承する場合、型名はコンパイラに認識されます。For example, if you inherit from a type in an assembly, the type name becomes known to the compiler.

__Declspec (thread)を使用したソースコードからビルドされたメタデータをインポートする場合、スレッドのセマンティクスはメタデータに保存されません。When importing metadata built from source code that used __declspec(thread), the thread semantics aren't persisted in metadata. たとえば、 __declspec (thread) で宣言された変数が、.NET Framework 共通言語ランタイム用に構築されたプログラムでコンパイルされ、 #using経由でインポートされる場合、変数に __declspec (thread) セマンティクスはありません。For example, a variable declared with __declspec(thread), compiled in a program that is built for the .NET Framework common language runtime, and then imported via #using, won't have __declspec(thread) semantics on the variable.

#Usingによって参照されるファイル内のインポートされたすべての型 (マネージとネイティブの両方) は使用できますが、コンパイラはネイティブ型を定義ではなく宣言として扱います。All imported types (both managed and native) in a file referenced by #using are available, but the compiler treats native types as declarations, not definitions.

/clr でコンパイルするときには、mscorlib.dll が自動的に参照されます。mscorlib.dll is automatically referenced when compiling with /clr.

LIBPATH 環境変数は、コンパイラが #usingに渡されたファイル名を解決するときに検索するディレクトリを指定します。The LIBPATH environment variable specifies the directories to search when the compiler resolves file names passed to #using.

コンパイラは、次のパスに従って参照を検索します。The compiler searches for references along the following path:

  • #Usingステートメントで指定されたパスです。A path specified in the #using statement.

  • 現在のフォルダー。The current directory.

  • .NET Framework のシステム ディレクトリ。The .NET Framework system directory.

  • /Aiコンパイラオプションを使用して追加されたディレクトリ。Directories added with the /AI compiler option.

  • LIBPATH 環境変数のディレクトリ。Directories on LIBPATH environment variable.

Example

アセンブリ (C) をビルドし、それ自体が別のアセンブリ (A) を参照するアセンブリ (B) を参照する場合、C での型のいずれかを明示的に使用しない限り、アセンブリ A を明示的に参照する必要はありません。If you build an assembly (C) and reference an assembly (B) that itself references another assembly (A), you won't have to explicitly reference assembly A unless you explicitly use one of A's types in C.

// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};

Example

// using_assembly_B.cpp
// compile with: /clr /LD
#using "using_assembly_A.dll"
public ref class B {
public:
   void Test(A a) {}
   void Test() {}
};

Example

次の例では、 using_assembly_Aで定義されている型をプログラムが使用していないため、 using_assembly_Aを参照しない場合、コンパイラエラーは発生しません。In the following sample, there's no compiler error for not referencing using_assembly_A.dll, because the program doesn't use any of the types defined in using_assembly_A.cpp.

// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
   B b;
   b.Test();
}

関連項目See also

プリプロセッサディレクティブPreprocessor directives