![]() |
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:
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.
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; Danke im voraus |
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: |
Re: IdIRC.Free flasch?
Hi,
Zitat:
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. |
Re: IdIRC.Free flasch?
Zitat:
|
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:
Welche Delphi Version setzt Du ein?
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; Gruß Assertor |
Re: IdIRC.Free flasch?
Delphi 7 und SVN Version 402? weiss nicht genau. Aber die wo alle IdIRC sachen gefixt wurden.
Gruss |
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: |
Re: IdIRC.Free flasch?
Hallo,
Zitat:
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 |
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 |
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 |
Re: IdIRC.Free flasch?
Hallo,
Zitat:
Zitat:
Zitat:
Und ich habe eben beides geprüft: Zur Laufzeit erstellt (by Code) und über die Form auch. Zitat:
Gruß Assertor |
Re: IdIRC.Free flasch?
Zitat:
Auch schicke ich dir nicht aus langeweile PNs mit anhang. :-D Und ich habe das ja nicht nur unter XP gestestet. Auch unter 2k. Ich würde vorschlagen das wir das hier nun erstmal "ruhen" lassen bis ich dir eine "demo" schicken kann. Sonst suchst du dir nen ast, und das muss nicht sein. Ich habe es grade mal ohne .Close und ohne .Free versucht. Zitat:
Gruss |
Re: IdIRC.Free flasch?
Hallo,
Zitat:
Zitat:
Gruß, Assertor |
Re: IdIRC.Free flasch?
Zitat:
Obwohl... könnte ich schon. Vertreibt langeweile :-D (kleiner scherz) Gruss |
Re: IdIRC.Free flasch?
Hallo,
Zitat:
Poste mal bitte etwas mehr Code, insbesondere da Du scheinbar eine Iteration über eine Liste von IdIRC Clients machst! Die niedrige AV deutet afaik darauf hin, das auf etwas schon freigegebenes zugegriffen wird. Also: Code her! |
Re: IdIRC.Free flasch?
Zitat:
|
Re: IdIRC.Free flasch?
Hi,
Zitat:
Damit meine ich nicht ein 3- oder 5-Zeilen Snippet, hellsehen kann ich nicht. Ich wette langsam darauf, das zu 99,9% der Fehler in Deiner IdIRCServer-Klasse liegt (die nichts mit dem TIdIRCServer von Indy zu tun hat, richtig?). Gruß, Assertor |
Re: IdIRC.Free flasch?
Zitat:
Gruss |
Re: IdIRC.Free flasch?
Hallo,
Zitat:
Fürs Protokoll und spätere Leser: AltNickName war kein Fehler, sondern schlicht nie in Indy IdIRC implementiert. Das habe ich heute nachgeholt. Gruß, Assertor |
Re: IdIRC.Free flasch?
Ne, ich mach dir wieder so eine "demo". Wie bei den anderen sachen auch. Das ist viel einfacher für dich. Dann kannst du das wieder direkt nachvollziehen. Weil bisher habe ich nur gute erfahrungen damit gemacht. Du (oder wer auch immer) konntest es ruckzuck fixen und gut war.
Ob das ctcp oder altnickname war, egal. Ging viel viel schneller als das hin und her. Wenn das nicht so wäre hätte ich ja nixmehr geschickt ;) Du musst zugeben das wir nie sollange gebraucht haben. Da ich neben bei ja auchnoch was anderes mache, komme ich wie sicherlich gemerkt schonmal durcheinander. So kann ich abends in ruhe einen 3zeiler machen und dir schicken. Da kam noch nie eine rückfrage so wie hier. Gruss und danke im voraus |
Re: IdIRC.Free flasch?
Hallo,
DelTurbo hat mir nun eine Demo geschickt. Das Ergebnis: 1. Seine D7 EXE hat den Fehler 2. Sein Projekt-Source bei mir mit einem frischen D7 und Indy Source kompiliert hat den Fehler nicht Der Code funktioniert natürlich auch ohne IOHandler.Close und IOHandler.Free, bevor hier ein Leser auf die Idee kommt, selbst sowas zu machen:
Delphi-Quellcode:
Im Ergebnis also ein laaaanger Thread für ein Problem, das keins ist. Zumindest kein Indy-Problem oder Bug ;)
IdIRC.Disconnect('Bye');
// IdIRC.IOHandler.Close; <- nicht nötig // IdIRC.IOHandler.Free; <- nicht nötig IdIRC.Free; Ich tippe auf alte DCUs irgendwo im Pfad, aber das muß DelTurbo nun selbst prüfen... Kann jedem Delphi-Neuling mal passieren. Also, alles halb so wild. Gruß, Assertor :dp: |
Re: IdIRC.Free flasch?
Zitat:
Aber das hier ist ein sooooo blöder fehler, den kann man schlecht tracen. Wie besprochen werde ich am Wochenende mal Delphi neu auf nen anderen rechner machen und Indy neu draufpacken. Öhm, ne fileliste was gelöscht werden muss gibt es wohl nicht, oder? |
Re: IdIRC.Free flasch?
So,
ich habe Delphi auf einem "sauberen" System installiert. Meine vorgehens weise hänge ich unten dran. Fehler bleibt. Wenn ich ehrlich sein darf, es juckt mich nicht wirklich. Ich hab halt das .Free drinn und damit geht es. Wenn du noch eine andere idee hast, kannste es ja sagen. Gruss Zitat:
![]() |
Re: IdIRC.Free flasch?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hänge das Testprogramm mal hier dran. Es sind 3 Buttons drauf.
Zuerst Erstellen connecten klicken. Dann connected er ins irc.iz-smart.net. Dann wahlweise Löschen mit .Free oder ohne .Free klicken. Bei mir kommt bei ohne .Free Zugriffsverletzung bei Adresse 004751DD in Modul 'Project1.exe'. Lesen von Adresse 00000094. Gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz