初日 最新 目次 MAIL HOME


*-- To Tell The Truth --*
Cruz
MAIL
HOME

My追加

2001年07月23日(月)
虫潰し

でました、バグ。
実行エラーです。
『ハンドルされていない例外はaaa.exe(KERNEL32.DLL)にあります』

なんじゃあ〜?!それ??


<デバックすること数十分>

犯人はLockFileExであることを突き止める。
LockFileExの各引数の値を確かめてみたり、
webで検索し使用例を探してみたり・・・そんなこんなで数時間。
KERNEL32.DLLについてまで調査しちゃったよ。
(関係がなさそうだということしかわからなかったが)

ふとMSDNライブラリで関数の使用法を再確認したら、
あれ?第6引数ってOVERLAPPED構造体のポインタ・・・?
私は"0"にしていた。
きちんと構造体ポインタにしてあげたら直りました。

旧(バグバージョン)
 LockFileEx(hAddFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 0, GetFileSize(hAddFile, NULL), 0);

新(修正バージョン)
 OVERLAPPED ova;

 ova.hEvent = 0;
 ova.Offset = ova.OffsetHigh = 0; // 初期値設定

 LockFileEx(hAddFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 0, GetFileSize(hAddFile, NULL), &ova);

この実行エラーはメモリやらの関係で出没するらしく、
毎回必ず出るエラーではありません。
現に、旧(バグバージョン)で正常動作していたときもあるのだから。

それにしてもエラーメッセージ判りにくすぎ。
頼むよMicrosoft・・・・。