あいたたた、今までとんでもねーコード書いてた。
// System::String^ から std::wstring に変換
std::wstring to_std(System::String^ str) {
array<wchar_t>^ warray = str->ToCharArray();
pin_ptr<wchar_t> pin = &warray[0];
return std::wstring(pin); // まてまてぇい!
}
…ダメよねコレ。
ToCharArray() で Char配列を取り出したとき、L'\0'で終端されてないよねぇ。
だから正しくは:
// System::String^ から std::wstring に変換
std::wstring to_std(System::String^ str) {
if ( str != nullptr ) {
array<wchar_t>^ warray = str->ToCharArray();
if ( warray->Length != 0 ) {
pin_ptr<wchar_t> pin = &warray[0];
return std::wstring(pin, pin+warray->Length);
}
}
return std::wstring();
}
これでいいのかな? どーですC++/CLIなヒト?
# ついでにnull/長さ0にも対応。