LCMapString を使ってダイレクトに文字列を変換する(C++/CLI 編)
昨日は VB で LCMapString を使うサンプルを書いてみたわけですが、何気に C++/CLI にもチャレンジしてみたくなりました。で、できたのがこれ。
#include "stdafx.h" #include "windows.h" #include "vcclr.h" using namespace System; // 文字列を現在のロケールで変換 System::String^ MapString(System::String^ source, int mapFlags) { if (String::IsNullOrEmpty(source)) { throw gcnew ArgumentException(L"空文字は処理できません。", "source"); } pin_ptr<const wchar_t> src = PtrToStringChars(source); array<wchar_t>^ buffer = gcnew array<wchar_t>(source->Length + 1); pin_ptr<wchar_t> dest = &buffer[0]; ::LCMapString(::GetUserDefaultLCID(), mapFlags, src, -1, dest, buffer->Length); return gcnew String(dest); } int main(array<System::String ^> ^args) { Console::WriteLine(L"コンピューター → " + MapString(L"コンピューター", LCMAP_HIRAGANA)); Console::WriteLine(L"こんぴゅーたー → " + MapString(L"こんぴゅーたー", LCMAP_KATAKANA)); Console::ReadKey(); return 0; }
結果
コンピューター → こんぴゅーたー
こんぴゅーたー → コンピューター
書いててつくづく思ったのですが、C++/CLI ってホントに C++ と別言語ですね。よほど特殊な案件でなければ、C++/CLI を実戦で使う機会はなさそうです。もし実戦で使うならネイティブアプリとマネージ DLL の仲介役とかが一番役立つかもしれませんね。