【发布时间】:2011-04-01 23:45:37
【问题描述】:
在 VC++ .Net 中,Clr/Safe (/clr:safe) 和 Clr/Pure (/clr:pure) 是什么意思?
【问题讨论】:
标签: visual-c++ clr compiler-options
在 VC++ .Net 中,Clr/Safe (/clr:safe) 和 Clr/Pure (/clr:pure) 是什么意思?
【问题讨论】:
标签: visual-c++ clr compiler-options
来自doc:
/clr:pure 产生一个微软 仅中级语言 (MSIL) 没有本机的输出文件 可执行代码。然而,它可以 包含编译为 MSIL 的本机类型。
/clr:safe 仅生成 MSIL(无 本机可执行代码),可验证 输出文件。 /clr:safe 启用 验证诊断(PEVerify 工具(Peverify.exe))。
【讨论】:
我认为这些信息还不够。从另一个答案看来,它只是类型检查。从this doc 看来,不止如此。
当使用
/clr(不是/clr:pure或/clr:safe)且未使用__clrcall时,获取函数的地址始终返回本机入口点函数的地址。当使用__clrcall时,不会创建本机入口点函数,因此您获取的是托管函数的地址,而不是入口点thunk 函数。有关详细信息,请参阅双响。
/clr(公共语言运行时编译)意味着所有函数和函数指针都是__clrcall,并且编译器不允许将编译区域内的函数标记为__clrcall以外的任何内容。当使用 /clr:pure 时,__clrcall只能在函数指针和外部声明上指定。
【讨论】: