WindowsXPPro SP2
Delphi5 Enterprise を使っています。
FTP接続で画像をダウンロード、アップロードする機能を作っていたのですが、
WindowsXPのファイアウォールを有効にした状態でDisconnectすると
「モジュール 'ftpdemo.exe' のアドレス 0044D254 でアドレス FFFFFFFC に対
する読み込み違反がおきました。」とエラーが発生してしまいます。
ファイアウォールの許可リストに実行ファイルを追加しても同様です。
Delphi5についているFTPデモで実行してもまったく同じ現象が発生します。
(C:\Program Files\Borland\Delphi5\Demos\FastNet\Ftp)
(ちなみに上のエラーはデモで実行したときのものです。)
たとえばデモのソースを借りますが、下記で
Button1Click で接続
Button2Click、Button3Click をクリックしリストを表示(何度か繰り返す)
Button3Click で切断
とすると、必ずではないですが、上記エラーメッセージがでます。
何度か繰り返すとほぼ確実に再現します。
ファイアウォールを無効にするとエラーは発生しません。
現在は、Disconnect をせずに使用しています(エラーは発生しません)
接続時間(TNMFTP.TimeOut)を5000(5秒)にして使用していますが、
Disconnect をしないで毎回Connectで接続して画像をダウンロードするといった
プログラムで問題は出ないでしょうか?
とりあえず今のとここちらでは問題は出ていないようです。
また、この現象を回避する方法などはあるのでしょうか?
特に回避策がない場合は、「Disconnect をしない」という方法で運用しようと
思いますが、
何かアドバイスいただければ幸いです。
それではよろしくお願いいたします。
-------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
If CheckBox1.Checked then
Begin
NMFTP1.Proxy := Edit6.Text;
NMFTP1.ProxyPort := StrToInt(Edit7.Text);
End;
NMFTP1.Host := HostTxt.Text;
NMFTP1.Port := StrToInt(PortTxt.Text);
NMFTP1.Timeout := 5000;
NMFTP1.UserID := UserTxt.Text;
NMFTP1.Password := PassTxt.Text;
try
NMFTP1.Connect;
except
On E:Exception do
writeln(E.message);
end
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
NMFTP1.Disconnect;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Q := 1;
try NMFTP1.Nlist; except end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Q := 1;
try NMFTP1.List; except end;
end;
------------------------------------------------------
--------------------------------
株式会社 ヒューネス
柏原 佑輔 kash...@hunes.co.jp
--------------------------------