我有一個相當大的MFC應用程序剛從VS6.0遷移到VS2008。這是一個非常痛苦的過程,但現在我想探索任何可用的託管代碼選項。我能夠使用/ clr開關成功構建項目,似乎可以讓我訪問託管類型。MFC使用/ clr編譯器選項構建 - CString/System :: String轉換
我想知道System :: String和CString之間的轉換是否自動進行。我發現的MSDN文檔表明這種轉換不是自動的,但我沒有發現這種情況。以下所有三個示例都可以工作,MSDN也記錄了1和2。我很好奇的是示例3,它也有效,但我不知道爲什麼。 CurrentDirectory屬性正在將一個指針返回到託管堆字符串^,但是爲什麼我能夠將它分配給CString?到底什麼是示例3,以及什麼是內存管理影響?
例1)
marshal_context^context = gcnew marshal_context(); String ^env = System::Environment::CurrentDirectory; const char* env2 = context->marshal_as(env); AfxMessageBox(env2); delete context;
例2)
CString s(System::Environment::CurrentDirectory); AfxMessageBox(s);
例3)
CString s = System::Environment::CurrentDirectory; AfxMessageBox(s);