^System::Stringを*charにして使いたい

VisualStudioを使ってC++/CLIを書き始めた。
それにOpenCVOpenGLを絡めて画像を扱うとする。


C++/CLIでファイル名なんかのデータは基本的にSystem:Stringで与えられるが、
他のプログラムに渡そうと思ったら*char型への変換が必要。
#OpenCVのcvLoadImageとか


そこでその変換方法。
System::Runtime::InteropServices::Marshal::StringToGlobalAnsi
を使ってchar*型のポインタに変換、代入し、使い終わったchar*を
System::Runtime::InteropServices::Marshal::FreeHGlobal
で開放してやると良い、らしい。どっちも長い。


画像処理ソリューション:【C++/CLI】System::String^からchar*へ変換
http://imagingsolution.blog107.fc2.com/blog-entry-89.html
よりほぼ抜粋。感謝!

OpenFileDialog^ dlg = gcnew OpenFileDialog;
dlg->Filter = "ビットマップ(*.bmp)|*.bmp";
dlg->ShowDialog();

//System::String^からchar*へ変換
char* pStr = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(dlg->FileName).ToPointer();
IplImage *src_img = cvLoadImage(pStr, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(pStr));