Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi IdIRC.Free flasch? (https://www.delphipraxis.net/146603-idirc-free-flasch.html)

DelTurbo 23. Jan 2010 14:31


IdIRC.Free flasch?
 
Hi,

ich erstelle zur laufzeit mehrere IdIRC´s. Nun möchte ich natürlich auch Disconnecten können. Hier mal ein code-snipsel...

Delphi-Quellcode:
IrcServer[i].Timer1.Enabled:=False;
IrcServer[i].Timer1.Free;
IrcServer[i].Timer2.Enabled:=False;
IrcServer[i].Timer2.Free;
IrcServer[i].IdIrc.Disconnect('ATDisconnect');
IrcServer[i].IdIrc.IOHandler.Close;
IrcServer[i].IdIrc.Free;
Bei dem .Free bekomm ich immer eine zugriffs verletzung. Ist das nicht richtig mit .Free? Bei den Timern geht das. Ich bin da nun etwas verwirrt.

Danke im voraus

DelTurbo 23. Jan 2010 15:56

Re: IdIRC.Free flasch?
 
Bin grad quasi drüber gefallen.

IrcServer[i].IdIrc.IOHandler.Close;
IrcServer[i].IdIrc.IOHandler.Free;
IrcServer[i].IdIrc.Free;

Dann geht es. :gruebel:

Assertor 27. Jan 2010 23:41

Re: IdIRC.Free flasch?
 
Hi,

Zitat:

Zitat von DelTurbo
Bin grad quasi drüber gefallen.

IrcServer[i].IdIrc.IOHandler.Close;
IrcServer[i].IdIrc.IOHandler.Free;
IrcServer[i].IdIrc.Free;

Dann geht es. :gruebel:

Warum machst Du ein IOHandler.Close? Bekommst Du denn eine Fehlermeldung wenn Du nur IdIRC.Free aufrufst?

Gruß Assertor

Edit: Hab gerade Deine PN gesehen. Es geht also darum, dass eine AV Auftritt, wenn Du nicht .Close aufrufst. Ich prüf das mal ab.

DelTurbo 28. Jan 2010 10:35

Re: IdIRC.Free flasch?
 
Zitat:

Zitat von Assertor
Edit: Hab gerade Deine PN gesehen. Es geht also darum, dass eine AV Auftritt, wenn Du nicht .Close aufrufst. Ich prüf das mal ab.

Danke

Assertor 28. Jan 2010 10:38

Re: IdIRC.Free flasch?
 
Hi DelTurbo,

ich hab das jetzt bestimmt 50x geprüft und bekomme keine AV. Indy ist bei Dir ja die letzte aus dem SVN, ansonsten bitte dazuschreiben.

Edit: Das Close ist natürlich drin: Destruktorreihenfolge IdIRC.Destroy > IdCmdTCPClient.Destroy > IdTCPConnection.Destroy:

Delphi-Quellcode:
destructor TIdTCPConnection.Destroy;
begin
  // Just close IOHandler directly. Dont call Disconnect - Disconnect may be override and
  // try to read/write to the socket.
  if Assigned(IOHandler) then begin
    IOHandler.Close;
    // This will free any managed IOHandlers
    IOHandler := nil;
  end;
  ...
end;
Welche Delphi Version setzt Du ein?

Gruß Assertor

DelTurbo 28. Jan 2010 10:45

Re: IdIRC.Free flasch?
 
Delphi 7 und SVN Version 402? weiss nicht genau. Aber die wo alle IdIRC sachen gefixt wurden.

Gruss

DelTurbo 28. Jan 2010 10:50

Re: IdIRC.Free flasch?
 
Ui, stopp. Nun kommen wir durcheinander. Auf jeden fall ich. Es sind 2 verschiedene sachen. Das aus der PN hat nix mit dieser sache hier zu tun.

Dort "liegt" der idirc ja schon in der Form1. Hier geht es darum, wenn der IdIRC zur laufzeit erstellt wurde. Sonst bräuchte ich ja kein free machen :zwinker:

Assertor 28. Jan 2010 11:15

Re: IdIRC.Free flasch?
 
Hallo,

Zitat:

Zitat von DelTurbo
Ui, stopp. Nun kommen wir durcheinander. Auf jeden fall ich. Es sind 2 verschiedene sachen. Das aus der PN hat nix mit dieser sache hier zu tun.

Dort "liegt" der idirc ja schon in der Form1. Hier geht es darum, wenn der IdIRC zur laufzeit erstellt wurde. Sonst bräuchte ich ja kein free machen :zwinker:

Gut, ist ja auch egal. Das Close ist trotzdem unnötig, da es intern schon gemacht wird. Einfach der Klassenvererbung der Destruktoren folgen.

Ich habe jetzt gerade die SVN Version mit dem IRC Fix (Rev 4017) und die aktuelle Version (Rev 4030) mit Delphi 7 PE Build 4.453 unter einem frischen Win XP SP3 x32 getestet: Keine Probleme - weder bei IdIRC auf der Form noch per Code erzeugt. Connect, FormClose und Connect, Disconnect, FormClose ausprobiert. Intern nutzt der TCP Client ja TThreads. Delphi 5, 6 und 7 sind nicht gerade gut was die TThread Klasse angeht, vielleicht ist das die Ursache?

Auf jeden Fall ist das leider "not reproducible". Es kann an anderen Komponenten, der exakten Delphi Version (Patch & Update Level?), Tools wie EurekaLog/madExcept oder sonstwas liegen. Ohne mehr Information kann ich da leider nichts machen... :glaskugel:

Gruß,

Assertor

Assertor 28. Jan 2010 11:23

Re: IdIRC.Free flasch?
 
Hi,

Kannst Du mal bitte die Fehlermeldung 1:1 hier posten? Kommt denn eine AV oder eine Exception? Beim Testen bitte das eigene IOHandler.Close weglassen...

Gruß,

Assertor

DelTurbo 28. Jan 2010 11:27

Re: IdIRC.Free flasch?
 
:gruebel: Wieso schreibst du hier was von close??? :gruebel:

Nochmal, die PN hat garnix hiermit zu tun. Bitte behandel PN einzeln und antworte mir auf die PN. Nicht hier im thread. Ich peil im moment wirklich nixmehr.

Zurück zu diesem Thread hier:
Für dieses beispiel hier ist close unerheblich. Es geht hier um einen per laufzeit erstellten und auch genutzen IdIRC. Wichtig, er muss einmal connecten. Sonst tritt der fehler nicht auf.

Zur laufzeit!!!
Erstellen und löschen geht.
Erstellen, Connecten und löschen geht nicht.

Die PN musst du bitte gesondert behandeln. Sonst kommen wir total durcheinander. Und das sind wir wohl schon :oops:

Gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz