TIdFTPServerを使用してサーバープログラムを作りました.
データを取得できるようになったのですが
現在時々ですが、『EAccessVioration』のエラーが表示されます。
ただ、動作的に停止するわけでなく
ボタンを押せばメッセージウィンドウは消えます.
処理も続行しています。
イベント上では引っかからないので
たぶんTIdFTPServerのコンポーネント内部で表示されるのだと思いますが、
この表示を行わないようにするにはどうすればよいのでしょうか?
例外エラーを表示しないというような設定ができるのでしょうか?
よろしくお願いします.
MemCheckなどで、TIdFTPServerのどこで例外が発生しているか確認してみてはどうでしょう。
Indy8であれば、もしかしたらIndy9でバグフィックスしているかもしれません。
# 未確認です
Indy8なのかIndy9なのかは
どうやってしらべるのでしょうか?
現在使用しているのはDelphi7に
もともとついているものです.
MemCheck をダウンロードしました。
ためしにサンプルをコンパイルしようと思ったのですが
コンパイルできません。
MemCheckInstallExceptionHandler(GetExceptInfoFunc, SetExceptMessageFunc);
この行で、以下のメッセージが出ます。
[警告] Project1.dpr(18): シンボル 'ExceptionRecord' はプラットフォームに依存すると宣言されています
どうすればよいのでしょうか?
それならばIndy9.00.10でしょう。ソースに、IdVers.incというファイルがあり、そこに書いてあります。
サイトには、現在、Indy9.00.14が出ています。
バージョンをあげたからと言ってバグフィックスされているかわかりません。
IndyのサイトのBugListに載っていなければ、バグフィックスされていないと思います。
何にせよ、原因となる部分を突き止めてから、バージョンアップに踏み切った方がよいと思います。
もしかしたら、Indyではなくコーディングが原因かもしれませんし。
やっぱり、MEMCheckの使い方がわかりません。
こちらにあったものを使用すればよいのかと思うのですが
http://www.yks.ne.jp/~hori/MemCheck.html
Delphi7.0では使えないのでしょうか?
どうやってもサンプルプログラムがコンパイルできないです。
それについては、一昨日ここの掲示板の「例外が発生した関数名を取得するには?」にて回答しています。
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を
どのように設定すればよいのでしょうか?
DLLでエラーが起きているのであれば、DLLに入れる必要があると思います。
使い方は全く変わりませんよ。
DLLのソースに、同じように記述すればOKです。
DLLにMemCheckを入れました.
例外エラーが発生しなくなってしまいました.
MemCheckが隠蔽工作を行っているのでしょうか?
それとも、MemCheckを入れることで
例外エラーが発生しなくなる要素があったのでしょうか?
これを調べる方法はないのでしょうか?
エラーが発生しなくなったので
現状で少し様子を見ていきたいと思います.
ツイート | ![]() |