zoukankan      html  css  js  c++  java
  • 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
     7void 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
    16void func2() {
    17   printf("In unmanaged function.\n");
    18}

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

    •输出:
            In managed function.
            In unmanaged function.
  • 相关阅读:
    不错的计算机免费电子书网站
    十点提高编程技巧
    delphi 通过TStyleManager设置主题类型
    delphi 简体和繁体字符串转换
    delphi unidac 连接mysql
    Delphi 的字符及字符串 string、AnsiString、WideString、String[n]、ShortString
    delphi format格式
    AnsiString和WideString 区别
    企业级Docker私有仓库部署(https)
    企业级Docker私有仓库之Harbor部署(http)
  • 原文地址:https://www.cnblogs.com/suyang/p/1093827.html
Copyright © 2011-2022 走看看