managed, unmanaged (托管,非托管)

•概述:
        托管代码是可由公共语言运行库检查和管理的代码。托管代码可以访问托管对象。使用 /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
 6 //  func1 is managed
 7 void  func1()  {
 8   System::Console::WriteLine("In managed function.");
 9}

10
11 //  #pragma unmanaged
12 //  push managed state on to stack and set unmanaged state
13 #pragma  managed(push, off)
14
15 //  func2 is unmanaged
16 void  func2()  {
17   printf("In unmanaged function.\n");
18}

19
20 //  #pragma managed
21 #pragma  managed(pop)
22
23 //  main is managed
24 int  main()  {
25   func1();
26   func2();
27}

•输出:
        In managed function.
        In unmanaged function.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值