Einzelnen Beitrag anzeigen

Friday

Registriert seit: 6. Mai 2008
101 Beiträge
 
Delphi 11 Alexandria
 
#1

TRTTIMethod.Invoke eines Interface ausführen

  Alt 7. Nov 2022, 21:26
Hallo,
bei Versuch einen Serializer zu schreiben, bleibe ich gerade bei den Interfaces stecken.
Der Serializer ist eine rekursive Funktion die ein TValue entgegen nimmt.
Übernommen aus diesem Thread: https://stackoverflow.com/questions/...14088#11514088
Allerding ist der Interface Teil in dem sonst gut funktionierenden Beispiel leer.
Das habe ich folgend ergänzt. Es wird über alle Methoden die das Interface definiert iteriert und wenn eine Methode einen Rückgabewert <> nil (also Funktion) hat und keine Parameter erwartet, wird versucht die rekursive Funktion erneut aufzurufen mit dem Rückgabewert der aufzurufenden Funktion:
Code:
    tkInterface: // Identifies an interface type.
      begin
        sList.Add(FSumIndent + 'interface ' + name + ':' + thing.TypeInfo.name);
        IncIndent();
        for LMethod in LContext.GetType(thing.TypeInfo).GetMethods do
        begin
          if (LMethod.ReturnType <> nil) and (length(LMethod.GetParameters) = 0) then
            Serialize(LMethod.name, LMethod.Invoke(thing, []), sList); //<-- AV
        end;
        DecIndent();
        sList.Add(FSumIndent + 'end');
      end;
Dass ich hier bei "LMethod.Invoke(thing,.." eine AV bekomme ist nicht weiter verwunderlich, denn ich übergebe statt einer Instanz nur ein Interface.
Aber die Frage ist wie komme ich an das Objekt ran, dass hinter dem Interface steckt?
  Mit Zitat antworten Zitat