Windows2003Server で「外字ザウルス」の動作確認中に、単語登録で「品詞情報が取得できない」ってエラーが出て、読みの登録がストップしてしまってた。
で、どうも MS-IME2003 にするとそうなることがわかっていろいろ調べてみた。
結局、最後までわからなくて、MSのテクニカルサポートに問い合わせすると、「ImmGetRegisterWordStyle」の使い方がおかしいらしい。
確かに、その API は、ドキュメントを見る限り、第3引数を NULL にしてよいとは書いてない。
ただ、MS-IME2000 までは、第3引数を NULL で指定することによって、使える品詞情報のバッファサイズを返していた。
つか、まともな API の実装なら普通そうだと思う。
だって、バッファのサイズがわからないから、NULL でサイズを問い合わせているわけで、そもそもバッファのサイズがわからないのに、バッファのポインタを指定しろと言うこと自体無理がある。
結局、下記のサンプルのように、1ブロック分のダミーの情報エリアを用意して、品詞情報を取得すれば解決はするんだけど、なんだかなぁ~
まぁ これも仕様ですかねぇ。
// 単語登録の準備のため、品詞情報を取得 HKL hKL = ::GetKeyboardLayout(0); ASSERT(hKL != NULL); _TCHAR theImeName[256]; ::ImmGetIMEFileName(hKL,theImeName,256); STYLEBUF* theSyTblDummyP = new STYLEBUF; // アホなIME2003のための措置 UINT theCnt = ::ImmGetRegisterWordStyle(hKL,0,theSyTblDummyP); delete theSyTblDummyP; theSyTblDummyP = NULL; if (theCnt <= 0) { AfxMessageBox(_T("品詞情報が取得できない")); return FALSE; } STYLEBUF* theSyTblP = new STYLEBUF[theCnt]; ASSERT(theSyTblP != NULL); ::ImmGetRegisterWordStyle(hKL,theCnt,theSyTblP); ・ ・ ・ 単語登録の処理 ・ |