5

Windows 2003 Server で DataSnap Delphi 2009 アプリケーションを実行します。DataSnap クライアントとサーバーは同じコンピュータ上にあり、Borland Socketserver 経由で DCOM を使用します。クライアントはバックグラウンド バッチ ジョブを実行します。

場合によっては、クライアントがサーバー アプリケーションに接続できず、サーバー デスクトップにメッセージ ダイアログが表示され、「サーバーに接続できませんでした。ネットワーク パスが見つかりませんでした」などのメッセージが表示されることがあります。または「Objectexporter が見つかりません。」

私たちの Delphi クライアント コードは、メッセージ ダイアログを使用してエラーや例外を表示することはありません。代わりに、try ... except .. finally ... end とログを使用して接続エラーを処理しているため、ダイアログは DataSnap メソッドによって作成されていると思います。このモーダル ダイアログ ボックスを非表示にする方法はありますか?

更新: すべての例外は下位レベルのルーチンで処理されます。メイン ループは、例外が発生したとき (処理または未処理) の切断と再接続を処理します。

  while True do
  begin
    Connect;
    while True do
    begin
      try
        DoMyWork;
      except
        Break;
      end;
    end;
    Disconnect;
  end;
4

1 に答える 1

3

解決策 1) application.oneexception に対するグローバル フックで問題を処理できる可能性があります。

http://www.chami.com/tips/delphi/011497D.html

解決策 2)

EurekaLog または MadExcept を使用して、アプリケーションがそのエラーを発生させた場所を特定し、エラーを処理します。

解決策 3)

アプリケーション メッセージ ダイアログに対するグローバル フック。フックの例を以下に示します。

http://delphi.about.com/gi/o.htm?zi=1/XJ&zTi=1&sdn=delphi&cdn=compute&tm=43&f=22&su=p284.9.336.ip_p504.1.336.ip_&tt=2&bt=1&bts=1&zu=http% 3A//www.delphicorner.f9.co.uk/articles/apps7.htm

アプリケーションのすべてのメッセージを照会し、そのウィンドウをキャッチすると、アプリケーションではなくメッセージを処理します。今は時間がないので、messagedlg によって発生した wmessage がどれなのか正確にはわかりません。

それが役に立ったことを願っています。

よろしくお願いします、

于 2010-07-23T11:31:22.767 に答える