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

问题描述:

任何人都可以请我解释为什么/ clr与/ mtd不兼容? 这是什么替代方法?如果我使用/ md或/ mdd,内部会发生什么情况?为什么/ clr在Visual Studio中与/ mt和/ mtd不兼容?

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

+0

为什么你想要/ clr&/ mtd?如果你告诉我们你想达到的目标,我们可能会帮助你做到这一点。 – 2009-06-02 09:18:13

+5

..可能是他只是好奇:) – cwap 2009-06-02 09:40:13

我预计线索给出here

如果您在使用/ CLR编译器 开关,你的代码将与 导入库,msvcmrt.lib链接。导入库引用了一个新的 库msvcm80.dll,它在您的托管代码和本地CRT之间提供代理服务器 。您不能在/ clr中使用静态链接的CRT(/ MT或/ MTd 选件) 。改为使用 动态链接库(/ MD或 /MDd)。

/clr标志导致您的代码引用新的DLL msvcm80.dll - 这充当您的托管代码和CRT之间的代理。很难说这个代理的确切功能,但我想它可以作为托管堆上的分配接口,垃圾回收,托管线程和类似的东西。如果您链接CRT的静态版本,那么代理将无法拦截您对运行时库的调用。