AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Was ist eine Callback Funktion

Ein Thema von Luckie · begonnen am 29. Mär 2006 · letzter Beitrag vom 23. Apr 2006
Antwort Antwort
Seite 4 von 4   « Erste     234   
NicoDE
(Gast)

n/a Beiträge
 
#31

Re: Was ist eine Callback Funktion

  Alt 31. Mär 2006, 09:35
Zitat von Luckie:
Wie wäre es denn jetzt korrekt?
Typsicher und ohne Adressoperator (Delphi sorgt implizit dafür, dass die Adresse übergeben wird).

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 von Luckie:
Bzw. wie macht es Windows? Da wird ja auch immer ein zeiger erwartet.
Das kommt auf die Übersetzung des Headers an... wenn die Parameter nicht als Funktionsprototypen deklariert sind, kommt man leider nicht ohne Typkonvertierungen und/oder den Adressoperator aus.
In eigenen Schnittstellen sollte dies allerdings nicht vorkommen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#32

Re: Was ist eine Callback Funktion

  Alt 31. Mär 2006, 09:58
So, habe es mal korrigiert und entsprechend angepasst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#33

Re: Was ist eine Callback Funktion

  Alt 22. Apr 2006, 13:45
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:
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;
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#34

Re: Was ist eine Callback Funktion

  Alt 23. Apr 2006, 14:39
Hat da niemand eine Meinung zu?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#35

Re: Was ist eine Callback Funktion

  Alt 23. Apr 2006, 14:51
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.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#36

Re: Was ist eine Callback Funktion

  Alt 23. Apr 2006, 14:54
Hallo,
Zitat von Luckie:
was spricht für einen Pointer bzw. Integer?
die aktuelle Befindlichkeit .
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
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#37

Re: Was ist eine Callback Funktion

  Alt 23. Apr 2006, 15:11
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#38

Re: Was ist eine Callback Funktion

  Alt 23. Apr 2006, 15:25
Ich denke auch, dass ich bei Pointer bleiben werde, da das mehr nach benutzerspezifischen Daten klingt.[xml]
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#39

Re: Was ist eine Callback Funktion

  Alt 23. Apr 2006, 15:54
Zitat von Oxmyx:
Rückruffunktionen werden auch bei Sortierverfahren eingesetzt. Beispiel: Ich will einen ganzen Haufen TAutos sortieren. Meine Sortierfunktion kann natürlich nicht wissen, nach welchen Kriterien ich meine Autos sortiert haben will, also übergebe ich eine Funktion, um diese Entscheidung zu treffen.
z.b. TList macht das auch so: wenn du TList.Sort() aufrufst, musst du als parameter eine Funktion übergeben, und diese funktion bekommt dann nachher beim sortieren die Pointer auf zwei Elemente, die du dann vergleichst und dementsprechend einen bestimmten rückgabewert zurückgibst (-1, 0 oder 1).
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 12:25 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