今回は珍しく C++/CLI のお話。なお、C# と混ざると型名がややこしくなるので、今回はマネージドの型については CLR の汎用型名で統一します。
今ふと思い立ってとある C 言語のライブラリを C++/CLI でラップしようと試みているところなのですが、そこでふと気になったのが多分 C++/CLI 使う人たちが一度は立ち止まる問題である、String^ から wchar_t* への変換のこと。
一般的には、ToCharArray の先頭要素のアドレスを pin_ptr<wchar_t> で受けたり、Marshal::StringToHGlobalUni でポインタにしたりする、と言う風な解説がなされますが、これらはメモリのコピーが発生するためどうしてもパフォーマンスに影響が出てきます。後者なんか FreeHGlobal の呼び出し責任も出てきますし。
続きを読む