托管代码是可由公共语言运行库检查和管理的代码。托管代码可以访问托管对象。使用 /clr 编译的应用程序可能包含托管数据,也可能不包含托管数据。
•注释:
VS2005的C++编译器参数'/clr'为是否使用托管功能提供了模块级的控制.在源代码中如果你想要托管则"#pragma managed",否则"pragma unmanaged".
不托管的部分或全部源代码被编译为本机程式,即CLR把不托管的部分代码译成本机平台的可执行十进制代码,而托管的那部分源代码则被译成CLR中间可执行代码,些部分代码要在CLR平台上运行.
如果没使用'/clr'参数,VS2005 C++编译器是忽略"#pragma managed"及"pragma unmanaged"的;如果使用了'/clr'参数,默认情况下源代码都是被托管的.默认情况下,/clr 无效。当 /clr 生效时,/MD 也将生效。/MD 确保从标准头 (.h) 文件中选择运行库例程的动态链接的多线程版本。多线程处理是托管编程所必需的,其中一部分原因是 CLR 垃圾回收器将在辅助线程中运行终结器。
"#pragma managed"及"pragma unmanaged"语句应位于你所想托管或不托管C++代码之前.
•举例:
1
// 该example来源于MSDN Library
2
// pragma_directives_managed_unmanaged.cpp
3
// compile with: /clr
4
#include <stdio.h>
5![](/Images/OutliningIndicators/None.gif)
6
// func1 is managed
7
void func1() {
8
System::Console::WriteLine("In managed function.");
9
}
10![](/Images/OutliningIndicators/None.gif)
11
// #pragma unmanaged
12
// push managed state on to stack and set unmanaged state
13
#pragma managed(push, off)
14![](/Images/OutliningIndicators/None.gif)
15
// func2 is unmanaged
16
void func2() {
17
printf("In unmanaged function.\n");
18
}
19![](/Images/OutliningIndicators/None.gif)
20
// #pragma managed
21
#pragma managed(pop)
22![](/Images/OutliningIndicators/None.gif)
23
// main is managed
24
int main() {
25
func1();
26
func2();
27
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/None.gif)
15
![](/Images/OutliningIndicators/None.gif)
16
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
19
![](/Images/OutliningIndicators/None.gif)
20
![](/Images/OutliningIndicators/None.gif)
21
![](/Images/OutliningIndicators/None.gif)
22
![](/Images/OutliningIndicators/None.gif)
23
![](/Images/OutliningIndicators/None.gif)
24
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
•输出:
In managed function.
In unmanaged function.