![]() |
Re: Was ist eine Callback Funktion
Zitat:
In der Praxis kommt es leider vor, dass die Typen in den verschiedenen Delphi-Versionen unterschiedlich deklariert sind. In dem Fall werden (links- und/oder rechts) explizite Typkonvertierungen notwendig (was die Typsicherheit von Delphi leider ad absurdum führt...). Den Adressoperator würde ich, wann immer möglich, vermeiden. Zitat:
In eigenen Schnittstellen sollte dies allerdings nicht vorkommen. |
Re: Was ist eine Callback Funktion
So, habe es mal korrigiert und entsprechend angepasst.
|
Re: Was ist eine Callback Funktion
Ich überarbeite gerade meine Unit MpuNTU.pas mit ihren Callback-Funktionen. Dabei erweitere ich die eigentliche Funktion, um einen zusätzlichen Parameter, damit der Benutzer der Callback-Funktion weitere, beliebige Daten mitgeben kann. Das sieht dann so aus:
Delphi-Quellcode:
Jetzt meine Frage. EnumWindows macht es genauso, nur da ist der zusätzliche Parameter als LPARAM, also Cardinal, deklariert, ich verwende als Datentyp einen Pointer, weil ich dachte, da kann ich alles reinstopfen und wer weiß, was ein zukünftiger Benutzer der Unit damit machen will. Allerdings könnte man einen Pointer auch zu einem Integer casten, wie man es bei EnumWindow machen würde, wenn man obiges Beispiel nimmt. Ist das halo gehupft wie gesprungen oder was spricht für einen Pointer bzw. Integer?
type
PMyEnumParam = ^TMyEnumParam; TMyEnumParam = record lb: TListbox; end; function EnumUserCallback(Username: string; cntUsers: Integer; Data: Pointer): Boolean; begin PMyEnumParam(Data)^.lb.Items.Add(Username); Result := True; end; procedure TForm1.Button1Click(Sender: TObject); var Param: TMyEnumParam; begin Param.lb := Listbox1; EnumUsers('', FILTER_NORMAL_ACCOUNT, EnumUserCallback, @Param); end; |
Re: Was ist eine Callback Funktion
Hat da niemand eine Meinung zu?
|
Re: Was ist eine Callback Funktion
Ich denke, dass ein Integer besser passen würde wegen portabilitet.
Am sonsten, was Delphi betrifft, ist es egal, denn man kan einen Integer zum Pointer machen und umgekehrt. |
Re: Was ist eine Callback Funktion
Hallo,
Zitat:
Im Ernst, das ist Geschmackssache. Ein Pointer ist immer genauso groß wie ein Integer, also sind die beiden austauschbar. Die Frage ist, was wird vermutlich verwendet? Wenn ein Programmierer in der Situation öfter einen Integer übergeben möchte, so deklariert man auch einen Integer. Ist ein Pointer wahrscheinlicher, nimmt man eben auch einen Pointer. Hat man keine Ahnung, dann ist es auch egal. Gruß xaromz |
Re: Was ist eine Callback Funktion
Hallo Luckie,
ich bin für Pointer, das klingt etwas allgemeiner als Integer. Bei einem Integer-Parameter könnte man ja davon ausgehen, daß man durch unterschiedliche Werte das Verhalten der aufrufenden Routine steuern kann. Dies ist aber nicht der Fall, da sie den Wert unverändert an die Callback-Routine übergeben soll. Gruß Hawkeye |
Re: Was ist eine Callback Funktion
Ich denke auch, dass ich bei Pointer bleiben werde, da das mehr nach benutzerspezifischen Daten klingt.[xml]
|
Re: Was ist eine Callback Funktion
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 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