![]() |
SOAP RIO Object Free Fehler
Hallo Zusammen...
Ich habe einen komischen Fehler... Folgenden Source:
Delphi-Quellcode:
Ersetze ich jetzt im Create, Application durch NIL... Kein Fehler mehr...
constructor TMasterbaseTest.Create;
begin inherited; FHTTPRIO := THTTPRIO.Create(Application); FHTTPRIO.WSDLLocation := GlobalServer+'/cgi-bin/meinService.dll/wsdl/IMainService'; FHTTPRIO.Service := 'IMainService'; end; destructor TMasterbaseTest.Destroy; begin FHttPRIO.Free; <--- EXCEPTION end;
Delphi-Quellcode:
Object wir nur Create/Free sonst keine Operationen...
FHTTPRIO := THTTPRIO.Create(NIL);
Jemand ne Idee? Grüsse Mavarik |
AW: SOAP RIO Object Free Fehler
HTTPRio ist doch ein Interface, einfach auf nil setzen anstatt free aufzurufen.
|
AW: SOAP RIO Object Free Fehler
Das Free bewirkt, dass die virtuelle Methode [TComponent].Notification() aufgerufen wird.
Ausserdem werden alle Komponenten, die der Komponente Application gehören (also die Child-Components) benachrichtigt. Und natürlich werden auch die Kinder der Kinder benachrichtigt. Hier der entscheidende Ausschnitt aus dem Code:
Delphi-Quellcode:
Ich weiss jetzt nicht, welche Komponenten "Application" als Owner haben, aber es geht im Prinzip ein Broadcast an alle diese Komponenten.
procedure TComponent.Notification(AComponent: TComponent;
Operation: TOperation); var I: Integer; begin if (Operation = opRemove) and (AComponent <> nil) then RemoveFreeNotification(AComponent); if FComponents <> nil then for I := 0 to FComponents.Count - 1 do // Rekursiver Aufruf!! TComponent(FComponents[I]).Notification(AComponent, Operation); end; Irgendeine Komponente könnte das "in den falschen Hals bekommen". Wegen dieser Eskalation an Notification()-Aufrufen sollte man "Application" nicht als Owner angeben. |
AW: SOAP RIO Object Free Fehler
Zitat:
I.d.R. ist HttpRio doch eine Komponente die Du aufs Formular klicks... Auf NIL setzten reicht nicht... sonst liefert : ReportMemoryLeaksOnShutDown := true; Ganz viel was nicht "geFree'd" wurde... Grüsse Mavarik |
AW: SOAP RIO Object Free Fehler
PS:Ganz vergessen, Sorry!
Delphi-Quellcode:
Erzeugt auch beim Free eine Exception!
constructor TMasterbaseTest.Create;
var InterfaceVariable : IMainService; begin inherited; FHTTPRIO := THTTPRIO.Create(NIL); // <--- NIL!! FHTTPRIO.WSDLLocation := GlobalServer+'/cgi-bin/meinService.dll/wsdl/IMainService'; FHTTPRIO.Service := 'IMainService'; InterfaceVariable := FHTTPRIO as IMainService; // NEU! end; Mavarik |
AW: SOAP RIO Object Free Fehler
Was hat TMasterbaseTest als Vorfahr?
TMasterbaseTest ist schließlich der Ersteller dieses THTTPRIO, also sollte es auch der Owner sein. Aber nur, wenn FHTTPRIO ein Objektzeiger bleibt und nirgendwo eine Interfaceinstanz verwendet wird. (durch die Owner-Beziehung bräucht man das Free dann nicht, da es dadurch ja sowieso freigegeben wird) Ist FHTTPRIO ein Interfacezeiger, was es sein sollte, wenn irgendwo über ein Interface auf dieses Objekt zugegriffen wird, dann sollte es keinen Owner geben, da über die Interfacevariablen (Referenzzählung) die Freigabe geregelt werden sollte. |
AW: SOAP RIO Object Free Fehler
Hallo
andere kleine Frage: was für eine Exception erhälst du? Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 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-2025 by Thomas Breitkreuz