18

任何人都可以請我解釋爲什麼/ 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

回答

18

我預計線索給出here

如果您在使用/ CLR編譯器 開關,你的代碼將與 導入庫,msvcmrt.lib鏈接。導入庫引用了一個新的 庫msvcm80.dll,它在您的託管代碼和本地CRT之間提供代理服務器 。您不能在/ clr中使用靜態鏈接的CRT(/ MT或/ MTd 選件) 。改爲使用 動態鏈接庫(/ MD或 /MDd)。

/clr標誌導致您的代碼引用新的DLL msvcm80.dll - 這充當您的託管代碼和CRT之間的代理。很難說這個代理的確切功能,但我想它可以作爲託管堆上的分配接口,垃圾回收,託管線程和類似的東西。如果您鏈接CRT的靜態版本,那麼代理將無法攔截您對運行時庫的調用。

相關問題