AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Problem mit Record-Parametern an MethodenPointer bzw. FunktionsPointer

Problem mit Record-Parametern an MethodenPointer bzw. FunktionsPointer

Ein Thema von Andreas13 · begonnen am 19. Jun 2021 · letzter Beitrag vom 24. Jun 2021
Antwort Antwort
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
724 Beiträge
 
Delphi XE5 Professional
 
#1

AW: Problem mit Record-Parametern an MethodenPointer bzw. FunktionsPointer

  Alt 21. Jun 2021, 13:43
Vielen Dank, TiGü: Es funktioniert!
Nach Deiner Idee konnte ich den Aufruf sogar noch weiter vereinfachen, indem ich direkt MyFunktion(..) um den Eintrag Self: Pointer; erweitert habe:
Delphi-Quellcode:
Function MyFunktion(Self: Pointer; CONST Rec: DoubleDouble): DoubleDouble;
. . .
Zwar kapiere ich immer noch nicht, warum der mit einfachen Datentypen gängige Weg mit Records nur mit Self funktioniert, aber im Moment ist für mich nur wichtig, daß es klappt. Ich muß ja nicht alles verstehen...

Danke Dir noch einmal: Du hast mir sehr geholfen!
Gruß, Andreas
PS:
So funktionieren alle vier Varianten!
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
724 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Problem mit Record-Parametern an MethodenPointer bzw. FunktionsPointer

  Alt 21. Jun 2021, 16:00
Sorry, ich war wohl etwas voreilig und muß meine letzte pauschale Aussage etwas relativieren: Variante 2, also die direkte Verwendung des FunktionsPointers funktioniert doch NICHT (mehr).

Abhilfe: Stets MethodenPointer benutzen! Ein auf FunktionsPointer gecasteter externer MethodenPointer funktioniert nämlich immer korrekt.
Vorteil: Die Erzeugung des Objectes durch TTestObject.Create; ist nicht nötig.

Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (21. Jun 2021 um 16:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Problem mit Record-Parametern an MethodenPointer bzw. FunktionsPointer

  Alt 21. Jun 2021, 17:07
Oder die Generics -> reference to

Alle "offiziellen" Möglichkeiten, ohne an der automatischen Typbehandlung rumzupfuschen:
Delphi-Quellcode:
type
  TTest = class
    function A(): Boolean;
    function B(): Boolean; virtual; // bzw. overload oder auch dynamic
    class function C(): Boolean;
    class function D(): Boolean; virtual; // bzw. overload oder auch dynamic
    class function E(): Boolean; static;
  end;
  
function F(): Boolean;

{
  E entspricht F
  A = C (nur eben TClass statt TObject, beim Self)
  A und C auch mit Data/Self=NIL möglich
}


var
  X: function(): Boolean; // E oder F
  Y: function(): Boolean of object; // A, B, C oder D
  Z: reference to function(): Boolean; // alles, inkl. anonymer Methoden (nicht direkt als VAR ... muß einen TYPE haben)
  O: TTest;
  L: class of TTest;


O := TTest.Create;

X := TTest.E; // oder L.E oder O.E inkl. O=nil
X := F;
Y := O.A; // auch O=nil
Y := O.B;
Y := TTest.C; // oder L.C oder O.C inkl. L=nil
Y := TTest.D; // oder L.D oder O.D
Z := egal was
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (21. Jun 2021 um 18:21 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
724 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Problem mit Record-Parametern an MethodenPointer bzw. FunktionsPointer

  Alt 21. Jun 2021, 18:15
Danke, Himitsu!
Ich werde versuchen, Deinen recht konzentrierten Code zu verstehen. Leider habe ich noch etliche Lücken bezüglich Generics, anonymer Methoden etc.
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Problem mit Record-Parametern an MethodenPointer bzw. FunktionsPointer

  Alt 21. Jun 2021, 18:28
Bei "reference to procedure" werden intern quasi die Generics verwendet ... du selbst hast hier nichts damit zu tun ... macht alles der Compiler von selbst.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Problem mit Record-Parametern an MethodenPointer bzw. FunktionsPointer

  Alt 22. Jun 2021, 15:05
Ja genau. Einfach "reference to" dazu und Hirn abschalten
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Problem mit Record-Parametern an MethodenPointer bzw. FunktionsPointer

  Alt 22. Jun 2021, 15:35
Ja genau. Einfach "reference to" dazu und Hirn abschalten
Nur beim Vergleichen von Referenzen muß man nachdenken, da beim ReferenceTo intern mit einem "geheimen" Interface gearbeitet wird, wo sich nicht prüfen lässt was da drin für ein Zeiger liegt,

also ein if meineVariable = @eineFunktion then geht so nicht mehr, aber Zuweisen oder Ausführen gehen ganz einfach.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (22. Jun 2021 um 15:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

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 23:09 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