tmytのらくがき

個人の日記レベルです

GoogleIMEが動かなくなる

WindowsMobileとPCWindowsのコードレベル互換性はすごいよ!っていうためだけにPCで動くAzureaを公開してみたところGoogleIMEが動かないよ!って声があったので調べてみた。
結果として、AzureaはCOMを叩いているのでCoInitializeExを呼んでいるわけですが、こいつが原因らしい。
まず、GoogleIMEが動かなくなるコード。

CoInitializeEx(0, 0);

次に、GoogleIMEが問題なく動くコード。

CoInitializeEx(0, COINIT_APARTMENTTHREADED);

第2引数に0を渡すと動かなくなるようです。そもそも初期化するスレッディングモデルの定数渡さないといけないので正しいと言えば正しいのですが。
これでPCでの問題は解決されたのですが、第2引数にCOINIT_APARTMENTTHREADEDを指定すると今度はCEでCOMが動かなくなります。困った物です。
結局プリプロセッサでコンパイル時に切り替えるようにしました。
まぁ同じ名前の似たようなAPIセットが公開されている別なOSなので仕方ないと言えば仕方ないですね。そもそもCoInitialize()でいいじゃないかというのもありますが。