■
ドラッグアンドドロップされたファイル名を取り出して、これを C の文字列にするために作った関数が
昨日の時点ではこうでした。
System::Void ConvertToSjisFromUnicode(std::string & sjisString, String ^ unicodeString) { array<unsigned char> ^ charArray = System::Text::Encoding::GetEncoding("Shift_JIS")->GetBytes(unicodeString); sjisString.assign(charArray->Length, 0); for ( int index = 0; index < charArray->Length; ++index ) { sjisString[index] = charArray[index]; } }
この後、 sjisString.c_str() で取り出します。
http://vene.wankuma.com/prog/CppCli_strings.aspx
こちらで紹介されていた方法だと
System::Void ConvertToSjisFromUnicode(std::string & sjisString, String ^ unicodeString) { IntPtr mptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(unicodeString); sjisString = static_cast<const char *>(mptr.ToPointer()); System::Runtime::InteropServices::Marshal::FreeHGlobal(mptr); }
for で一文字ずつコピーするのが無くなってスマートな感じがします。