TIdFTPServerの例外エラーの表示を消すには?

解決


迷子の子犬  2003-07-03 03:58:39  No: 3993  IP: [192.*.*.*]

TIdFTPServerを使用してサーバープログラムを作りました.
データを取得できるようになったのですが
現在時々ですが、『EAccessVioration』のエラーが表示されます。
ただ、動作的に停止するわけでなく
ボタンを押せばメッセージウィンドウは消えます.
処理も続行しています。
イベント上では引っかからないので
たぶんTIdFTPServerのコンポーネント内部で表示されるのだと思いますが、
この表示を行わないようにするにはどうすればよいのでしょうか?
例外エラーを表示しないというような設定ができるのでしょうか?
よろしくお願いします.

編集    削除
にしの  2003-07-03 04:00:56  No: 3994  IP: [192.*.*.*]

MemCheckなどで、TIdFTPServerのどこで例外が発生しているか確認してみてはどうでしょう。

Indy8であれば、もしかしたらIndy9でバグフィックスしているかもしれません。
# 未確認です

編集    削除
迷子の子犬  2003-07-03 17:33:18  No: 3995  IP: [192.*.*.*]

Indy8なのかIndy9なのかは
どうやってしらべるのでしょうか?
現在使用しているのはDelphi7に
もともとついているものです.

編集    削除
迷子の子犬  2003-07-03 18:16:55  No: 3996  IP: [192.*.*.*]

MemCheck をダウンロードしました。
ためしにサンプルをコンパイルしようと思ったのですが
コンパイルできません。

MemCheckInstallExceptionHandler(GetExceptInfoFunc, SetExceptMessageFunc);
この行で、以下のメッセージが出ます。

[警告] Project1.dpr(18): シンボル 'ExceptionRecord' はプラットフォームに依存すると宣言されています

どうすればよいのでしょうか?

編集    削除
にしの  2003-07-03 18:18:28  No: 3997  IP: [192.*.*.*]

それならばIndy9.00.10でしょう。ソースに、IdVers.incというファイルがあり、そこに書いてあります。

サイトには、現在、Indy9.00.14が出ています。
バージョンをあげたからと言ってバグフィックスされているかわかりません。
IndyのサイトのBugListに載っていなければ、バグフィックスされていないと思います。

何にせよ、原因となる部分を突き止めてから、バージョンアップに踏み切った方がよいと思います。
もしかしたら、Indyではなくコーディングが原因かもしれませんし。

編集    削除
迷子の子犬  2003-07-03 20:21:07  No: 3998  IP: [192.*.*.*]

やっぱり、MEMCheckの使い方がわかりません。

こちらにあったものを使用すればよいのかと思うのですが
http://www.yks.ne.jp/~hori/MemCheck.html

Delphi7.0では使えないのでしょうか?
どうやってもサンプルプログラムがコンパイルできないです。

編集    削除
にしの  2003-07-03 20:30:32  No: 3999  IP: [192.*.*.*]

それについては、一昨日ここの掲示板の「例外が発生した関数名を取得するには?」にて回答しています。

編集    削除
迷子の子犬  2003-07-04 17:41:16  No: 4000  IP: [192.*.*.*]

MEMCheckを試してみましたが
現状では何も代わりません.

表示されているのはIdFTPServerの内部だと思います.

プログラム構成的には
FTPサーバー部分はDLLで作成しています。

呼出側のプログラムのプロジェクトファイルでMemCheckを対応し、
Dllを呼び出してDLL側でIdFTPServerのインスタンスを作成し、
FTPサーバーを起動しています。
DLLの関数は
IdFTPServerのOpen、Get、Closeの3つを対応し
OpenではActive=True
CloseではActive=False
GetではIdFTPServerで取得したデータをメモリから読み出す
ということをしています。

DLLにMemCheckを入れるべきなのでしょうか?
入れるとすればMemCheckInstallExceptionHandlerを
どのように設定すればよいのでしょうか?

編集    削除
にしの  2003-07-04 18:53:00  No: 4001  IP: [192.*.*.*]

DLLでエラーが起きているのであれば、DLLに入れる必要があると思います。
使い方は全く変わりませんよ。
DLLのソースに、同じように記述すればOKです。

編集    削除
迷子の子犬  2003-07-05 03:44:20  No: 4002  IP: [192.*.*.*]

DLLにMemCheckを入れました.
例外エラーが発生しなくなってしまいました.

MemCheckが隠蔽工作を行っているのでしょうか?
それとも、MemCheckを入れることで
例外エラーが発生しなくなる要素があったのでしょうか?
これを調べる方法はないのでしょうか?

編集    削除
迷子の子犬  2003-07-10 22:37:06  No: 4003  IP: [192.*.*.*]

エラーが発生しなくなったので
現状で少し様子を見ていきたいと思います.

編集    削除