managed、unmanaged
启用函数级控制以将函数编译为托管或未托管函数。
#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();
}