統合外字管理ツール
外字でお困り?
by JJworkshop.
 
Windows自動運転
マクロで自動制御
by JJworkshop.
 
YouTubeの動画  
ダウンローダ
by JJworkshop.
 

§MS-IME2003で単語登録時、品詞取得の謎

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);
    ・
    ・
    ・
    単語登録の処理
    ・