Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Methode aus Interface nicht zuweisbar, aus Objektinstanz aber schon? (https://www.delphipraxis.net/210535-methode-aus-interface-nicht-zuweisbar-aus-objektinstanz-aber-schon.html)

TurboMagic 8. Mai 2022 15:36

Methode aus Interface nicht zuweisbar, aus Objektinstanz aber schon?
 
Hallo,

ich stehe vor dem Rätsel warum bei mir der Compiler mit
[dcc32 Fehler] MainFormLogic.pas(1220): E2035 Nicht genügend wirkliche Parameter
quittiert was ich versuche zu tun.

Ich habe eine Klasse, die hat eine Methode mit ein paar Parametern.
Dazu gibt es ein Interface welches diese Methode auch enthält.

In MainFormLogic erzeuge ich eine Interface Referenz zu diesem Interface.
Danach will ich die Methode aus dem Interface einem Property einer anderen Objektinstanz
zuweisen. Da meckert der Compiler.

Aber: deklariere ich jetzt eine methode mit genau den selben Parametern in der Klasse in
MainFormLogic in der auch diese Interface Referenz erzeugt wird und übergebe diese,
ist es für den Compiler ok.

Frage also: was it für den Compiler hier der Unterschied zwischen einer Interface Referenz
und einer Objektreferenz. Ich dachte beides mal sind bei einer solchen Methodenreferenz zwei
Pointer im Spiel: 1x auf den Speicher wo der Code der Methode ist und 1x auf die Objektinstanz,
welche die methode implementiert.

Grüße
TurboMagic

Uwe Raabe 8. Mai 2022 16:03

AW: Methode aus Interface nicht zuweisbar, aus Objektinstanz aber schon?
 
Zitat:

Zitat von TurboMagic (Beitrag 1505577)
Danach will ich die Methode aus dem Interface einem Property einer anderen Objektinstanz
zuweisen.

Wie ist denn dieses Property definiert?

peterbelow 8. Mai 2022 16:07

AW: Methode aus Interface nicht zuweisbar, aus Objektinstanz aber schon?
 
Ein "procedure of object" oder "reference to procedure" type ist nicht zuweisungskompatibel mit der Methode eines Interfaces. Gib dem Interface eine Methode, die den gwünschten event handler des Implementors zurückgibt.

Sei Dir dabei bewußt, dass es dabei ein potentielles Problem mit der Lebensdauer des Implementors gibt. Falls die über das Interface per reference counting gesteuert wird ist es möglich, das der Implementor dahinscheidet ohne dass das Objekt, dem Du den Handler übergeben hast, das mitkriegt. Vermutlich ist dieses Problem der Grund, wieso man eine Interface-Methode nicht direkt als Eventhandler verwenden kann...

TurboMagic 8. Mai 2022 16:47

AW: Methode aus Interface nicht zuweisbar, aus Objektinstanz aber schon?
 
Hm, an deiner Vermutung könnte was dran sein.
Ich überleg' mir mal wie ich damit umgehe. Evtl. am einfachsten statt der Methode gleich das
ganze Interface übergeben. Das wäre auch nicht schlimm...

himitsu 9. Mai 2022 11:50

AW: Methode aus Interface nicht zuweisbar, aus Objektinstanz aber schon?
 
Zitat:

ich stehe vor dem Rätsel warum bei mir der Compiler mit
Weil er hier nicht den Zeiger auf die Methode zuweisen will, sondern versucht die Methode auszuführen und deren Ergebnis zuweisen will.

Und zum Ausführen benötigt deine Methode vermutlich irgendwelche Parameter.



Zeiger auf Interface-Methoden kennt Delphi einfach garnicht.
So könnte man vielleicht mit der RTTI umsetzen.

Mehodendefinition speichern, den Methoden-Index im Interface speichern und dann entweder kart casten (InterfaceZeiger + Index/Offset) und direkt aufrufen über "Invoke" der erweiterten RTTI aufrufen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 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