...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

D言語2.0のためのWindowsウィンドウアプリケーション

今,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() がいいと思った.