マネージ、アンマネージ
関数をマネージまたはアンマネージとしてコンパイルするために関数レベルの制御を有効にします。
#pragma managed #pragma unmanaged #pragma managed([push,] on | off) #pragma managed(pop)
解説
/clr コンパイラ オプションは、関数をマネージまたはアンマネージとしてコンパイルするためのモジュール レベルの制御を提供します。
アンマネージ関数は、ネイティブ プラットフォーム用にコンパイルされ、プログラムのその部分の実行は、共通言語ランタイムによってネイティブ プラットフォームに渡されます。
関数は、/clr が使用されると、既定でマネージとしてコンパイルされます。
これらのプラグマを適用するときは次のようにします。
関数の前にあり関数本体内にはないプラグマを追加します。
#include ステートメントの後にプラグマを追加します。 #include ステートメントの前でこれらのプラグマを使用しないでください。
コンパイラは、コンパイルで /clr が使用されない場合、managed および unmanaged プラグマを無視します。
テンプレート関数がインスタンス化されるとき、テンプレートの定義時のプラグマの状態により、マネージかアンマネージかが決まります。
詳細については、「混在アセンブリの初期化」を参照してください。
使用例
// 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();
}