2008/11/04

Windows CEにおける文字コード

Windows CEでのプログラミング中に文字コードの扱いに苦労したのでメモメモ.

Windows CEではunicodeのみしかサポートされていないためCE上でchar型の引数を取る関数(printfとかstrcpy等)を実行すると強制終了する.
よって,char型の代わりにTCHAR型(もしくはwchar)を使う必要がある.
tchar.hにTCHAR型におけるprintfやstrcpyに対応する関数が定義されているので,こちらを使いましょう.

[tcharの対応表]http://palepoli.skr.jp/content/cpp/tchar.php

ちなみにchar型を引数にとっても大丈夫な関数もある,socket関数とか.
あと,データを格納する変数としてchar型を利用するのはセーフなもよう.

char型とTCHAR型の文字列を相互変換する関数を以下に示す.

[char to TCHAR]
MultiByteToWideChar( CP_ACP, // ANSI コードページ
MB_PRECOMPOSED, // 規定の方法
str, // 変換する文字列
-1, // 変換文字列の長さを自動計算
tbuf, // 変換後のバッファ(ワイド文字)
BUFFER_SIZE // バッファサイズ(ワイド文字数単位)
);


[TCHAR to char]
WideCharToMultiByte(
CP_ACP, // 変換に使うコードページ
0, // マッピング方法,0以外だと失敗した
str, // 変換する文字列(ワイド文字)
-1, // 変換文字列の長さを自動計算
cbuf, // 変換後のバッファ
BUFFER_SIZE, // バッファサイズ(ANSI文字数単位)
NULL, // マップできない文字の既定値のアドレス
NULL // 既定の文字を使ったときにセットするフラグのアドレス
);

0 件のコメント: