この発言は
#00579 Fermion さんのRE^3:長いファイル名(フルパス)を取得
に対するコメントです
この発言に対し以下のコメントが寄せられています
#00582 Fermion さん RE^5:長いファイル名(フルパス)を取得
Fermion さん、こんにちは。Satobe です。
> バグじゃないのでは?(呼び出しても問題ないようですよ。。。^^;)
バグだと思います。(^^;
> SysUtils の中の、FindClose( var F: TSearchRec ) を見てみますと、
>F.FindHandle <> INVALID_HANDLE_VALUE のときに Windows.FindClose( )
>を呼ぶようになっていますよ。 ((^^;)
FindFirstの方を調べてみて下さい。
Result := FindMatchingFile(F);
if Result <> 0 then FindClose(F);
↑というコードがあり、ここで FindCloseが実行されてしまうことが
あるんです。
しかし、FindCloseしても F.FindHandle = INVALID_HANDLE_VALUE に
なるわけではありませんから、アプリ側で再び FindCloseを呼び出す
と、すでにクローズされているハンドルを再びクローズしようとする
ことになり、(確か WinNTの場合に)例外が発生するはずです。
Win95では、なぜか問題が起きないので気づきにくいんですけど...
FindFirstが非ゼロを返した場合には、FindCloseを呼び出さないよう
にした方がいいですよ。(^^;
もともと Win32APIの仕様では、FindFirstFile APIに失敗したら、
FindClose APIは呼び出す必要ありません(ハンドルがないから
呼び出せない)ですしね。
98/06/21(日) 02:10 Satobe(JCG00336)
Original document by Satobe 氏 ID:(JCG00336)