Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Fehlermeldung beim Schließen des Programms unterdrücken


tr3bor - Fr 29.12.06 16:57
Titel: Fehlermeldung beim Schließen des Programms unterdrücken
Hallo,
in meinem Programm benutze ich die ICQClient Komponente. Wenn ich mich connected habe und ich das Programm dann schließen will oder ich den befehl zum disconnecten gebe, kommt eine Fehlermeldung (hier schon ein anderer Post zu dem thema:http://www.delphi-forum.de/topic_ICQClient+LogOff_67779.html). Ich möchte jetzt nur wissen wie ich diese Fehlermedlung Unterdrücken kann.

DANKE


max120b - Fr 29.12.06 16:59

Was gibts denn für nen Fehler? Vielleicht brauchst du den ja gar nicht zu unterdrücken, sondern er lösst sich beheben (is immer die bessere Lösung ;) ).

Aber ich hab sowas schonmal gemacht...ich such mal eben den code dazu raus


tr3bor - Fr 29.12.06 17:02

Deswegen hatte ich das alte Thema hinzugefügt ;)

aber hier nochmal:

Quelltext
1:
2:
Im Projekt project2.exe ist eine Exception der Klasse EThread aufgetreten. Meldung: 'Thread-Fehler: Das Handle ist ungültig(6)'.
Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzten.


und in dem alten Thema konnte mir niemand helfen den Fehler zu beheheben. Und da der mich nicht weiter stört würde das reichen auch wenn es natürlich eleganter wäre den Fehler zu beheben.


max120b - Fr 29.12.06 17:03

Hmm also spontan hab ich jetzt nur sowas hier anzubieten


Quelltext
1:
2:
3:
4:
5:
  try
    //Hier kommt der Code hin
  except
    //Das hier soll gemacht werden, wenn ein Fehler auftritt
  end;



Damit kannst du die Fehler zwar nicht unterdrücken, aber du kannst sie abfangen und darauf reagieren...vielleicht hilft das ja schon weiter


tr3bor - Fr 29.12.06 17:06

Ja das problem dabei ist ja das ich kein Code ausführe der den Fehler verursacht. Der Fehler tritt beim beenden des Programms auf. und wenn ich die Disconnect funktion in die try except sache mache wird er sich ja einfach nur nicht disconnecten und beim beenden des Programms kommt wieder der Fehler


galagher - Sa 30.12.06 19:03

user profile icontr3bor hat folgendes geschrieben:
Und da der mich nicht weiter stört würde das reichen auch wenn es natürlich eleganter wäre den Fehler zu beheben.

Du setzt eine ApplicationEvents-Komponente auf dein Formular, doppelklickst im OI auf Ereignisse/OnException und fügst einfach ein ; dort ein:

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
begin
 ;
end;

Das sorgt dafür, dass im Falle einer Fehlers "nichts" (-> ; ) getan wird. Allerdings fängt das jeden Fehler ab und du erhältst auch keine anderen Fehlermeldungen mehr.


C.Schoch - So 31.12.06 00:15

Das hört sich aber eher dannach, dass irgendein Thread nicht richtig beendet/freigegeben wurde oder du versuchst einen bereits beendeten Thread nochmals zu beenden.


Delete - So 31.12.06 09:08

was willst du denn mit dem ungültigen handle anstellen? nimm doch einfach ein gültiges ;-)

denke, diese fehlermeldung sollte man nicht unterdrücken, sondern deinen code korrigieren, damit er vernünftig funktioniert... sonst machst du nur speicherlöcher oder noch schlimmeres...


tr3bor - Mo 01.01.07 23:04

also das mit der application events exception hat nicht geklappt.

Und weiter weiß ich nicht wo ich auswählen kann welches Handle ich benutzte oder ob ich das schon beendet habe. Um den Fehler beheben zu können müsste ich an den Quellcode von der Funktion rankommen, da weiß ich aber nicht wie das geht.


alzaimar - Mo 01.01.07 23:09

Der Thread wird beendet (Thread-Handle ist also ungültig). Danach wird versucht, mit diesem Handle etwas zu machen. Das klappt nicht.

Also

1. Fehler finden.
2. Wenn 1 nicht funktioniert, weiter suchen.
3. Goto 2
4. goto 3
...

...
978. Verwende einen Sentinel:

Der 'Sentinel' ist ein kleines unsichtbares Programm, das auf eine Message 'WM_KILLME = WM_USER + 1234' wartet. Der lparam der Message ist das Applikationshandle der Anwendung, die abgeschossen werden soll. Der Sentinel schießt dann die Anwendung ab.

Die Anwendung, die nicht korrekt terminieren will, schickt im 'OnClose' diese Message raus und sezt 'Action' auf caHide: Der finalization-Code wird nicht ausgeführt, die Software abgeschossen, der Anwender ist zufrieden.

Ok, Dateien werden u.U. nicht geschlossen, Datenbanken (Paradox!!) nicht korrekt geschlossen und das Ganze ist eine 100% bescheuerte Lösung, aber sie funktioniert.