青空を目指して2

どこまでも続く日々日常。ゲーム・音楽好きのおっさんの半生。日々日常とちょっとだけ思ったことの日記。

WindowsのUnicode

最近VisualStudio2008でVC++のプログラム書いてるんだけど、自分今までUnicode対応プログラムかいたこと無かったんです。通信機器が多いので文字コードはCharをメモリ感覚でごりごりいじるのが当たり前の旧世代PGなのです。でUnicodeが判らないこと…。MFCでCStringを使ってコードを書きたいんだけど、元ソースがCharでの文字列とMFCコードがごちゃ混ぜな訳です。
あと、UnicodeじゃないCStringは結構判るつもりだったんです。
この辺がごちゃごちゃになるともう動かないこと…。型の違いでコンパイルが通らないわ、力業も通用しないわ、全く意図しない動きをするわ…。
丸一日ぐらいはまったおかげで何となくこの辺の仕様が理解できてきたけど、苦手意識強いわ…。
ちなみに、はまったのはEditBoxの入力値を取得する方法。
GetLineってメソッドを使用するMSDNのサンプルコードを使ったんだが、ここで取得した文字列をCString str.GetBuffer()ってメソッドでstrにぶち込んでる訳ですが、
これで取得したstr文字列に対して、IsEmpty()とかGetLength()とかしても全部0しか帰ってこないんです。メモリ見たらちゃんと文字列はコピーできてるのに。
悩みまくって判ったことは、このコピーだとCString内の文字列バッファに純粋にテキストコピーをするだけで、文字数情報が作成されないのね。
なので、ここで取得した文字列をさらにSetString()メソッドを使用してセットすると何とか解決。基本的なことなのかもしれないけど、わかんねぇよ…orz
さらに、char ←→ CStringTもmbstowcs_s(),wcstombs_s()でなんとかする。うーん。ややこしやー。全部CStringTで組んであれば簡単だったと思うんだが…。