Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zugriffsverletzung beim 2. Aufruf von Interface Methode

  Alt 11. Okt 2010, 16:30
Was passiert den bei Load, PlgInstance und Unload?

Das Interfaceobject darf bei Unload noch nicht freigegeben werden. Innerhalb von Prozeduren/Methoden verwendete Interfaces werden möglicherweise erst beim Verlassen oder bei erneuter Zuweisung eines anderen Interfaceobject freigegeben.

Meine Vermutung, der Compiler erzeugt daraus im Prinzip das:
Delphi-Quellcode:
   DummyInterfaceVariable := nil;
   {Schleife begin}
      Load; // hier wird das Interface erstellt
      try
        if Assigned(DummyInterfaceVariable) then
          DummyInterfaceVariable._Release; // <- hier knallts beim 2.Durchlauf

        DummyInterfaceVariable := PlgInstance;
        if Assigned(DummyInterfaceVariable) then
          DummyInterfaceVariable._AddRef;

        InfoSplit := DummyInterfaceVariable.GetFileInfoMulti(Split);
      finally
        Unload(True); // <- hier wird das Object vermutlich unzulässig freigegeben
        Split := nil;
      end;
   {Schleife end}
   if Assigned(DummyInterfaceVariable) then
     DummyInterfaceVariable._Release; // <- hier könnte es schon bei nur einem Durchlauf
  Mit Zitat antworten Zitat