我有一个相当大的 MFC 应用程序,它刚刚从 VS6.0 迁移到 VS2008。这是一个非常痛苦的过程,但现在我想探索任何可用的托管代码选项。我能够使用 /clr 开关成功构建项目,这似乎让我可以访问托管类型。
我想知道 System::String 和 CString 之间的转换是否是自动的。我发现的 MSDN 文档表明这种转换不是自动的,但我没有发现这种情况。以下所有三个示例都有效,并且 1 和 2 均由 MSDN 记录。我很好奇的是示例 3,它也有效,但我不知道为什么。CurrentDirectory 属性返回一个指向托管堆 String^ 的指针,但为什么我可以将它分配给 CString?示例 3 到底在做什么以及内存管理的含义是什么?
示例 1)
marshal_context ^ context = gcnew marshal_context(); 字符串 ^env = System::Environment::CurrentDirectory; const char* env2 = context->marshal_as(env); AfxMessageBox(env2); 删除上下文;
例 2)
CString s(System::Environment::CurrentDirectory); AfxMessageBox(s);
例 3)
CString s = System::Environment::CurrentDirectory; AfxMessageBox(s);