为什么/ clr与Visual Studio中的/ mt和/ mtd不兼容?

时间:2009-06-02 08:42:30

标签: visual-studio visual-c++ visual-studio-2005 c++-cli conditional-compilation

有人可以帮我解释一下/为什么/ clr与/ mtd不兼容? 有什么替代方案?如果我使用/ md或/ mdd会在内部发生什么?

据我所知,我们没有合并使用/ clr和/ mtd。有人可以解释是否有办法做到这一点?请解释我如何以及为什么/ clr与Visual Studio中的/ mt和/ mtd不兼容?

1 个答案:

答案 0 :(得分:22)

我希望线索是here

  

如果您使用的是/ clr编译器   切换,你的代码将链接   导入库,msvcmrt.lib。该   导入库引用一个新的   库,msvcm80.dll,它提供了一个   您的托管代码和。之间的代理   原生CRT。你不能使用   静态链接的CRT(/ MT或/ MTd   选项)/ clr。使用   动态链接库(/ MD或   / MDd)代替。

/ clr标志会导致您的代码引用新的dll msvcm80.dll - 它充当托管代码和CRT之间的代理。很难准确地说出这个代理的作用,但我猜它可以作为托管堆,垃圾收集,托管线程等分配的接口。如果您链接CRT的静态版本,那么代理将无法拦截您对运行时库的调用。