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) ? "成功" : "失敗"); } }
を作成して実行してみたところ、同様の現象が発生しました。 そもそも、テストプログラムが絶対に正しいとは言えませんが、多分、間違えて いないと思います(間違いを見付けた場合は小声で教えて下さ い)。 パフォーマンスモニタで確認すると
という具合にどんどんメモリを消費しています。最終的には、アプリケーション エラーが発生してしまいます。 本件の回避策は現在のところありません。大量に単語登録する場合や、削除する 場合は、ファイルをテキストエディタ等で分割して複数回に分けて実行する等の 対応をお願いします。
ImmGetRegisterWordStyle
関数が仕様と異なる動作をしている為で
す。MSDNによると、この関数は取得品詞数に0を取得すると、品詞数を返却す
る仕様のように記述されていますが、IME 2003 の場合はそのまま0が返却されて
いるようです。品詞数が解らないと必要なメモリの計算もできないので、困って
しまうのですが、とりあえず、512品詞を越える事は無いだろうという事で、現
在は取得品詞に512を指定し、実際に返却された品詞数から必要メモリを算出し
ています。本件は、IME 1.1 で修正済みです。