• 締切済み

ImmGetConversionListとATOKについて

Windows XP上で、ダイアログのボタンが押されたら、ひらがなを漢字に変換するプログラムを作成しています。 変換するのにImmGetConversionListを使用していますが、ATOK 2007だと特定の文字列("きちよーの"という文字列)を変換すると、不正な処理で終了してしまいます。 IMEでは問題ありません。これは、ATOK 2007の不具合なのでしょうか? また、回避するには、特定の文字列であれば変換しないようにするしかないのでしょうか? 以下のコードを実行すると不正な処理で止まってしまいます。 CMyDialog::OnOK() { HIMC hIMC = ::ImmCreateContext(); HKL hKL = ::GetKeyboardLayout(0); DWORD dwLen; if( hIMC ){ dwLen = ::ImmGetConversionList( hKL,hIMC,_T("きちよーの"),NULL,0,GCL_CONVERSION ); ::ImmDestroyContext( hIMC ); } }

みんなの回答

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.2

>>dwLen = ::ImmGetConversionList( hKL,hIMC,_T("きちよーの"),NULL,0,GCL_CONVERSION ); >dwLen = ::ImmGetConversionList( hKL,hIMC,_T("きちよーの"),(LPCANDIDATELIST)1,0,GCL_CONVERSION ); なんでNULLじゃない場合はキャストしてるの? 関係ない気がするけどね・・・

artp
質問者

補足

キャストはただのコンパイラの警告対策です。 結局、ジャストシステムに問い合わせてみたところ、すぐに返事をいただきました。 ジャストシステム側からの回答では、回避策として以下のように引数にImmGetConversionListにNULLを指定してサイズを取得するのではなく、サイズを以下のように指定してください、とのことでした。 BYTE Buffer[0x300]; LPCANDIDATELIST lpCL = Buffer; ::ImmGetConversionList( hKL,hIMC,_T("きちよーの"),pCL,0x100,GCL_CONVERSION );

すると、全ての回答が全文表示されます。
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

投げてる文字コードに問題があるんじゃない? ATOK2007がjis基準でしか受け取らないとかそういうオチが有ったりしないかな 問題になってるのは「ー」だと思うけどね。

artp
質問者

補足

「ー」が問題かと思い、"せんたー" や "きちょーの"という文字列で試してましたが、何の問題ありませんでした。 また、不思議なことに、以下のようにImmGetConversionListの第4引数にNULLでない値を指定すると、不正な処理はおきずに0が返ってきます。 dwLen = ::ImmGetConversionList( hKL,hIMC,_T("きちよーの"),(LPCANDIDATELIST)1,0,GCL_CONVERSION );

すると、全ての回答が全文表示されます。

関連するQ&A