Time-stamp: "2006-09-26 23:20:13 tfuruka1" [HOME] [UP]

IMEC「コマンドラインから使用するIME制御コマンド」の問題点等


大量の単語登録又は単語削除を行なうとアプリケーションエラーが発生

発生日 2006/09/19
解決日 ----/--/--

一度に大量の単語登録又は単語削除を行なうとアプリケーションエラーが発生し ます。ここでの「大量」の定義は、メモリ容量に左右されますが、私の環境 (Windows Xp 512MB)だと、概ね15000件程度で発生します。調査したところ、ど うやら IME APIのImmRegisterWord及び ImmUnregisterWordがメモリリークしているようです。当初はIMEC のコードを疑ったのですが、以下の単純なテストプログラム
#include <windows.h>
#include <imm.h>
#include <stdio.h>

int
main(int argc, char **argv)
{
    HKL hKl = GetKeyboardLayout(0);
    char szBuf[256];
    int i;

    for (i = 0; i < 100000; i++) {
        sprintf(szBuf, "ほげほげ%d", i);
        printf("%d: %s - %s\n", i, szBuf,
               ImmRegisterWord(hKl, "ほげほげほげほげほげ", 0x80000064, szBuf)
               ? "成功" : "失敗");
    }
}

を作成して実行してみたところ、同様の現象が発生しました。 そもそも、テストプログラムが絶対に正しいとは言えませんが、多分、間違えて いないと思います(間違いを見付けた場合は小声で教えて下さ い)。 パフォーマンスモニタで確認すると

784x322(8753bytes)

という具合にどんどんメモリを消費しています。最終的には、アプリケーション エラーが発生してしまいます。 本件の回避策は現在のところありません。大量に単語登録する場合や、削除する 場合は、ファイルをテキストエディタ等で分割して複数回に分けて実行する等の 対応をお願いします。


IME 2003で動作しない

発生日 2004/05/18
解決日 2004/05/31

IMEC 1.0 と IME 2003 の組合せで品詞の取得に失敗し、IMECが全く動作しない 問題が発生しました。原因は、IME-APIの ImmGetRegisterWordStyle関数が仕様と異なる動作をしている為で す。MSDNによると、この関数は取得品詞数に0を取得すると、品詞数を返却す る仕様のように記述されていますが、IME 2003 の場合はそのまま0が返却されて いるようです。品詞数が解らないと必要なメモリの計算もできないので、困って しまうのですが、とりあえず、512品詞を越える事は無いだろうという事で、現 在は取得品詞に512を指定し、実際に返却された品詞数から必要メモリを算出し ています。本件は、IME 1.1 で修正済みです。
tfuruka1@nifty.com
, .