managed
和 unmanaged
pragma
启用函数级控制以将函数编译为托管或非托管函数。
语法
#pragma managed
#pragma unmanaged
#pragma managed(
[push,
] {on
|off
})
#pragma managed(pop)
备注
/clr
编译器选项提供了用于将函数编译为托管或非托管函数的模块级控制。
为本机平台编译非托管函数。 该部分程序的执行将由公共语言运行时传递给本机平台。
当使用了 /clr
时,默认情况下将函数编译为托管函数。
当应用 managed
或 unmanaged
pragma 时:
在函数前添加 pragma,而不是在函数体内添加。
在 pragma 语句后添加
#include
。 不要在任何#include
语句之前使用它。
如果编译中未使用 managed
,编译器将忽略 unmanaged
和 pragma/clr
。
在实例化模板函数时,定义模板时 pragma 的状态确定该函数是托管还是非托管函数。
有关详细信息,请参阅混合程序集的初始化。
示例
// 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.