![]() |
Über RTTI Method.Invoke ein InterfacedObjekt zurück bekommen
Hallo,
in einem Serializer lese ich Eigenschaftswerte aus für eine Reporting Funktion. Dabei wird ein InterfacedObject dem Serializer übergeben und der ruft dann alle Methoden auf und lässt sich die Werte zurück geben. In manchen Fällen werden auch Records zurück gegegeben die dann auch durchsucht werden nach Fields und Methods. Funktioniert soweit alles bis auf einen Spezialfall: Wenn mein Interface eine Methode hat, das selbst ein Interface zurück gibt.
Delphi-Quellcode:
die Bedingung "if assigned(aTool)" wird nie erfüllt. Also die getter Funktion die ein Objekt über das Interface "IWerkzeug" zurück gibt, wird aufgerufen, es wird ein Interface zurück gegeben, aber ohne Objekt. (aValue.Empty = true). Die KI Hilfe meint es wäre in Bug in Delphi...
aValue := LMethod.Invoke(thing, []);
if aValue.Kind = tkInterface then begin var aTool: IWerkzeug; aTool := LMethod.Invoke(thing, []).AsInterface as IWerkzeug; if assigned(aTool) then begin aValue := TValue.From<IWerkzeug>(aTool); end; end; Ich nutze Delphi 12.2 Professional. |
AW: Über RTTI Method.Invoke ein InterfacedObjekt zurück bekommen
Ich kann mir das gerne einmal genau anschauen, aber dafür bräuchte ich einen konkreten Beispielcode, mit dem ich das nachvollziehen kann. Ich möchte nicht Zeit darauf verwenden, das nachzustellen, nur um dann eventuell festzustellen, dass es bei mir nicht auftritt, weil ich etwas anders gemacht habe. ;-)
|
AW: Über RTTI Method.Invoke ein InterfacedObjekt zurück bekommen
danke für das Angebot.
Stellt sich raus dass der Code doch wie gepostet funktioniert. Den Fall, dass ich von der Funktion ein nil zurück bekomme habe ich (wie sich raus stellte fälschlicherweise) kategorisch ausgeschlossen. Sorry für die Störung, ich muss mich jetz erstmal einer Tischkannte widmen. |
AW: Über RTTI Method.Invoke ein InterfacedObjekt zurück bekommen
Nur mal so generell: Die Frage nach einem reproduzierbaren Beispiel ist keine Schikane. In vielen Fällen erübrigt sich der Post hier in der DP oder auf SO wenn man so ein Beispiel selbst erstellt und dabei schon die Ursache findet, die dann oft auch an einer ganz anderen Stelle verortet wird.
|
AW: Über RTTI Method.Invoke ein InterfacedObjekt zurück bekommen
... oder man erklärt das Problem einer Gummiente :-)
|
AW: Über RTTI Method.Invoke ein InterfacedObjekt zurück bekommen
Also, wenn ich das richtig verstanden habe, steckt in aValue nun das Result der ersten Funktion.
Sollte dann nicht: a) LMethod eine andere Variable sein, denn in deinem Codebeispiel wäre das dieselbe Methode, die du ja gerade aufgerufen hast. b) dann nicht aValue an das Invoke dieser Methode übergeben werden und nicht thing? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 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