Einzelnen Beitrag anzeigen

Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#12

Re: try ... except ... finally ... ~ funktionieren nicht ?

  Alt 17. Dez 2009, 19:59
So hab den Fehler selber behoben.

Das Problem dabei ist, dass sich einige Exceptions nicht durch "try ... except ..." abfangen lassen, weil sie nicht im Stack des aktuellen Prozesses auftreten. Bei ClientSocket.Open() wird ein neuer Thread mit eigenem Stack instantiiert und dieser kann dann die Exception auslösen. Diese Exception kann man über ein Ereignis abfangen:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp;

type
  TForm1 = class(TForm)
    procedure FormClick(Sender: TObject);
  public
    procedure SocketErrorBehandlung(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClick(Sender: TObject);
var
  Client: TClientSocket;
begin
  Client := TClientSocket.Create(Self);
  Client.Host := 'localhost';
  Client.Port := 12345;
  Client.OnError := SocketErrorBehandlung; // für die Fehlerbehandlung
  Client.Open(); // <- hier wird der Thread gestartet, der den Fehler/Exception auslösen kann
end;

procedure TForm1.SocketErrorBehandlung(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  // hier wird der Fehler behandelt
  Form1.Caption := 'Fehler ist eingetreten, aber behandelt!';
  ErrorCode := 0;
end;

end.
Das gilt zunächst einmal für Delphi 7, denk ich mal.
Ich bin drauf gekommen, weil die Exception nicht exakt zu dem Zeitpunkt auftritt, als Client.Open() ausgeführt wird.
  Mit Zitat antworten Zitat