2003-04-05 [長年日記]

Pocket PCでのIMultiLanguage

以前書いたように、Pocket PCでのIMLangConvertCharsetの動作がWindowsと異なっていたのですが、もっと根本的なところが異なっていました。というのは、IMLangConvertCharset::DoConversionToUnicodeなどを呼び出すと、常に消費したバッファの長さが0になってしまうのです。これだと、ストリームなどの動作に問題があるので調べた見たところ、IMultiLanguage::ConvertStringToUnicodeを使うと問題ないようです。

で、ヘルプを詳しく見ていったところ、IMLangConvertCharset::DoConversionToUnicodeの二番目の引数は[in, out]になっていますが、何が出力されるかは記載されていません。IMultiLanguage::ConvertStringToUnicodeの方は、処理したバッファのサイズを返すと明記されていました。当然同じ動作をすると思い込んでいたのですが違ったのですね。Pocket PCもドキュメントどおりには動作していたと。

というわけで、IMultiLanguageを使うように修正しました。以前、IMLangConvertCharsetを使うように変えたのは、サポートされているかどうかを確認するためだったのですが、これはIMultiLanguage::IsConvertibleを呼び出して確認するようにしました。