VS6.0からVS2008に移行したばかりのかなり大きなMFCアプリケーションがあります。これはかなり骨の折れるプロセスでしたが、今度は利用可能なマネージコードオプションを調べたいと思います。/ clrスイッチを使用してプロジェクトを正常にビルドできました。これにより、管理対象タイプにアクセスできるようになります。
System::StringとCStringの間の変換が自動かどうか知りたいのですが。私が見つけたMSDNのドキュメントは、この変換が自動ではないことを示唆していますが、これが当てはまるとは思いませんでした。以下の3つの例はすべて機能し、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);