ViVi Home > 技術文書 > さくさく理解する C/C++ コンソールアプリ入門 > ユニコード文字出力(Win32)


 

 

ユニコード文字出力(Win32)
Copyright (C) 2014 by Nobuhide Tsuda

ユニコード文字出力

コンソールアプリケーションでは wcout でユニコード文字を出力できるはずですが、何故かユニコード文字を正しく表示出来ません。

そこで Win32 API を使って、ユニコードを出力する関数を独自に実装することにしました。

coutW(wchar_t ch) はユニコード1文字を表示する関数、coutW(const wchar_t *ptr) はヌルターミネイトされたユニコード文字列を表示する関数です。

void coutW(wchar_t ch)
{
    HANDLE hCons = GetStdHandle( STD_OUTPUT_HANDLE );
    DWORD len = 1;
    WriteConsoleW(hCons, &ch, len, &len, 0);
}
void coutW(const wchar_t *ptr)
{
    HANDLE hCons = GetStdHandle( STD_OUTPUT_HANDLE );
    DWORD len = wcslen(ptr);
    WriteConsoleW(hCons, ptr, len, &len, 0);
}
void coutW(const wchar_t *ptr, int len)
{
    HANDLE hCons = GetStdHandle( STD_OUTPUT_HANDLE );
    WriteConsoleW(hCons, ptr, len, (DWORD *)&len, 0);
}

WriteConsoleW(HANDLE, const VOID *ptr, DWORD nChar, LPDWORD, LPVOID) はユニコード文字列を表示する Win 32 API です。
最初の引数はコンソールハンドル。次の引数は文字列へのポインタ、その次は文字数です。 4番目は実際に表示された文字数を返す変数へのポインタをわたします。最後の引数は予備です。