AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi SOAP RIO Object Free Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

SOAP RIO Object Free Fehler

Ein Thema von Mavarik · begonnen am 21. Feb 2012 · letzter Beitrag vom 21. Feb 2012
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#1

SOAP RIO Object Free Fehler

  Alt 21. Feb 2012, 18:28
Hallo Zusammen...

Ich habe einen komischen Fehler...

Folgenden Source:

Delphi-Quellcode:
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;
Ersetze ich jetzt im Create, Application durch NIL... Kein Fehler mehr...

 FHTTPRIO := THTTPRIO.Create(NIL); Object wir nur Create/Free sonst keine Operationen...

Jemand ne Idee?

Grüsse Mavarik
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

AW: SOAP RIO Object Free Fehler

  Alt 21. Feb 2012, 18:37
HTTPRio ist doch ein Interface, einfach auf nil setzen anstatt free aufzurufen.
Lars
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: SOAP RIO Object Free Fehler

  Alt 21. Feb 2012, 18:49
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:
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;
Ich weiss jetzt nicht, welche Komponenten "Application" als Owner haben, aber es geht im Prinzip ein Broadcast an alle diese Komponenten.
Irgendeine Komponente könnte das "in den falschen Hals bekommen".

Wegen dieser Eskalation an Notification()-Aufrufen sollte man "Application" nicht als Owner angeben.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: SOAP RIO Object Free Fehler

  Alt 21. Feb 2012, 19:25
HTTPRio ist doch ein Interface, einfach auf nil setzen anstatt free aufzurufen.
Nein eigentlich nicht...

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
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: SOAP RIO Object Free Fehler

  Alt 21. Feb 2012, 19:33
PS:Ganz vergessen, Sorry!

Delphi-Quellcode:
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;
Erzeugt auch beim Free eine Exception!

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#6

AW: SOAP RIO Object Free Fehler

  Alt 21. Feb 2012, 19:56
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: SOAP RIO Object Free Fehler

  Alt 21. Feb 2012, 20:14
Hallo

andere kleine Frage: was für eine Exception erhälst du?

Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 Uhr.
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