【问题标题】:VC++ .Net Clr/Safe and Clr/PureVC++ .Net Clr/Safe 和 Clr/Pure
【发布时间】:2011-04-01 23:45:37
【问题描述】:

在 VC++ .Net 中,Clr/Safe (/clr:safe) 和 Clr/Pure (/clr:pure) 是什么意思?

【问题讨论】:

    标签: visual-c++ clr compiler-options


    【解决方案1】:

    来自doc

    /clr:pure 产生一个微软 仅中级语言 (MSIL) 没有本机的输出文件 可执行代码。然而,它可以 包含编译为 MSIL 的本机类型。

    /clr:safe 仅生成 MSIL(无 本机可执行代码),可验证 输出文件。 /clr:safe 启用 验证诊断(PEVerify 工具(Peverify.exe))。

    【讨论】:

    • 这会阻止我从我的 c++ cli 程序集中访问 DirectX 或 win32 代码吗?
    • 我还想知道这些是否只是类型检查,或者这些是否在标头中放置了一个标志来标识它们是纯的还是安全的?
    【解决方案2】:

    我认为这些信息还不够。从另一个答案看来,它只是类型检查。从this doc 看来,不止如此。

    当使用/clr(不是/clr:pure/clr:safe)且未使用__clrcall 时,获取函数的地址始终返回本机入口点函数的地址。当使用__clrcall 时,不会创建本机入口点函数,因此您获取的是托管函数的地址,而不是入口点thunk 函数。有关详细信息,请参阅双响。

    /clr(公共语言运行时编译)意味着所有函数和函数指针都是__clrcall,并且编译器不允许将编译区域内的函数标记为__clrcall 以外的任何内容。当使用 /clr:pure 时,__clrcall 只能在函数指针和外部声明上指定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多