マネージド、アンマネージド プラグマmanaged, unmanaged pragmas

関数レベルの制御を有効にして、関数をマネージまたはアンマネージとしてコンパイルします。Enable function-level control to compile functions as managed or unmanaged.

構文Syntax

マネージド #pragma#pragma managed
アンマネージ #pragma#pragma unmanaged
#pragma 管理 ( [プッシュ,] { on | off } ) #pragma managed( [ push, ] { on | off } )
#pragma マネージ (pop)#pragma managed(pop)

RemarksRemarks

/Clrコンパイラオプションは、関数をマネージまたはアンマネージとしてコンパイルするためのモジュールレベルのコントロールを提供します。The /clr compiler option provides module-level control for compiling functions either as managed or unmanaged.

アンマネージ関数は、ネイティブプラットフォーム用にコンパイルされます。An unmanaged function will be compiled for the native platform. プログラムのその部分の実行は、共通言語ランタイムによってネイティブプラットフォームに渡されます。Execution of that portion of the program will be passed to the native platform by the common language runtime.

関数は、/clr が使用されると、既定でマネージとしてコンパイルされます。Functions are compiled as managed by default when /clr is used.

これらのプラグマを適用するときは次のようにします。When applying these pragmas:

  • 関数の前にプラグマを追加しますが、関数本体内には追加しません。Add the pragma preceding a function, but not within a function body.

  • #include ステートメントの後にプラグマを追加します。Add the pragma after #include statements. ステートメントの前に#includeこれらのプラグマを使用しないでください。Don't use these pragmas before #include statements.

コンパイルでが使用されていない/clr場合、コンパイラはマネージプラグマおよびアンマネージプラグマを無視します。The compiler ignores the managed and unmanaged pragmas if /clr isn't used in the compilation.

テンプレート関数がインスタンス化されると、テンプレートが定義されているときのプラグマの状態によって、マネージとアンマネージのどちらであるかが決まります。When a template function is instantiated, the pragma state when the template is defined determines if it's managed or unmanaged.

詳細については、「混在アセンブリの初期化」を参照してください。For more information, see Initialization of Mixed Assemblies.

Example

// pragma_directives_managed_unmanaged.cpp
// compile with: /clr
#include <stdio.h>

// func1 is managed
void func1() {
   System::Console::WriteLine("In managed function.");
}

// #pragma unmanaged
// push managed state on to stack and set unmanaged state
#pragma managed(push, off)

// func2 is unmanaged
void func2() {
   printf("In unmanaged function.\n");
}

// #pragma managed
#pragma managed(pop)

// main is managed
int main() {
   func1();
   func2();
}
In managed function.
In unmanaged function.

関連項目See also

プラグマディレクティブと __ プラグマキーワードPragma directives and the __pragma keyword