今,D言語2.0のためのWindowsウインドウアプリケーションのサンプルコードを書いています.
例によって,Ansi/Unicode を切り替えることができるように toT() をいくつか定義してみました.
C++ & MFC の _T() に対応します.
そこで気になったんですが toUTF16(s).dup.ptr はゼロ終端の文字列なんでしょうか?
ちゃんと toUTF16(s~"\0").dup.ptr としないといけないんでしょうか.
調べ方がよくわからないので,教えてエロい人!
version (Ansi) { alias char TCHAR; // 省略 TCHAR* toT(string s) { return toStringz(toMBS(s)); // toMBSは別の場所で定義 } } else // version (Unicode) { alias wchar TCHAR; // 省略 TCHAR* toT(string s) { return toUTF16(s).dup.ptr; // zero終端? // return toUTF16(s~"\0").dup.ptr; // こうしないとダメ? } }
おまけ
toUint の文脈からいって,上の toT() は toWStringz じゃなくて toWstringz か?
なんか美しくないから toUTF16z() がいいと思った.