AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Methode aus Interface nicht zuweisbar, aus Objektinstanz aber schon?

Methode aus Interface nicht zuweisbar, aus Objektinstanz aber schon?

Ein Thema von TurboMagic · begonnen am 8. Mai 2022 · letzter Beitrag vom 9. Mai 2022
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#1

Methode aus Interface nicht zuweisbar, aus Objektinstanz aber schon?

  Alt 8. Mai 2022, 16:36
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 8. Mai 2022, 17:03
Danach will ich die Methode aus dem Interface einem Property einer anderen Objektinstanz
zuweisen.
Wie ist denn dieses Property definiert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
670 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 8. Mai 2022, 17:07
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...
Peter Below
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 8. Mai 2022, 17:47
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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 9. Mai 2022, 12:50
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:07 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