Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Was ist eine Callback Funktion (https://www.delphipraxis.net/66456-ist-eine-callback-funktion.html)

sniper_w 30. Mär 2006 20:26

Re: Was ist eine Callback Funktion
 
Zitat:

(Handles in C-APIs sind oft nicht anderes als Referenzen auf interne C++-Objekte).
Daran zweifle ich stark. Das sind eher die "ID-s", die dafür benuzt werden, die entsprechende Objekte ( sei es c++ "classes" oder "noramle struct" Gebilde) in einer Tabele(von Windows verwaltet, versteht sich) zu finden.
Hättest du recht, wäre das IMO eine potenzielle Sicherkeitslücke.

NicoDE 30. Mär 2006 20:40

Re: Was ist eine Callback Funktion
 
Zitat:

Zitat von sniper_w
Zitat:

(Handles in C-APIs sind oft nicht anderes als Referenzen auf interne C++-Objekte).
Daran zweifle ich stark. Das sind eher die "ID-s", die dafür benuzt werden, die entsprechende Objekte ( sei es c++ "classes" oder "noramle struct" Gebilde) in einer Tabele(von Windows verwaltet, versteht sich) zu finden.
Hättest du recht, wäre das IMO eine potenzielle Sicherkeitslücke.

Ich rede nicht von Windows APIs... :)
(sondern von Projekten die in C++ entwickelt werden und als kleinsten gemeinsamen Nenner eine flache "C"-API anbieten müssen)

sniper_w 30. Mär 2006 20:47

Re: Was ist eine Callback Funktion
 
Zitat:

Zitat von NicoDE
Ich rede nicht von Windows APIs... :)
(sondern von Projekten die in C++ entwickelt werden und als kleinsten gemeinsamen Nenner eine flache "C"-API anbieten müssen)

Insofern hast völlig recht :wink:

Luckie 30. Mär 2006 22:34

Re: Was ist eine Callback Funktion
 
So, ich habe das hier noch mal alles in einem Artikel auf meiner Homepage zusammengefasst: Callback-Funktionen. ich hoffe es ist korrekt und einigermaßen verständlich erklär.

Der entsprechende Thread in der Tutorialsparte: http://www.delphipraxis.net/internal...ct.php?t=79464

Oxmyx 30. Mär 2006 22:56

Re: Was ist eine Callback Funktion
 
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.

Luckie 30. Mär 2006 23:22

Re: Was ist eine Callback Funktion
 
Ah, sehr schöne Ergänzung.

runger 31. Mär 2006 07:16

Re: Was ist eine Callback Funktion
 
Hallo Luckie,

ich bin etwas verwirrt, bei mir funktioniert das hier nicht:

Delphi-Quellcode:
  DoSomething(@Callback);
sondern nur das:
Delphi-Quellcode:
  DoSomething(Callback);
Fehler? Oder was mach ich falsch. Dem allgemeinen Verständnis nach müsste deine Version richtig sein.

Rainer

Luckie 31. Mär 2006 07:27

Re: Was ist eine Callback Funktion
 
Bei mir funktioniert beides. :shock: Aber eigentlich sollte, wenn ich es mir genau überlege, nach Elvis Methode nur zweitere funktionieren, da kein Zeiger mehr erwartet wird.

Eventuell sollte man es so machen:
Delphi-Quellcode:
function CallBack(i: Integer): Boolean; stdcall;
begin
  result := True;
  ShowMessage(IntToStr(i));
  if i = 5 then
    result := False;
end;

type
  TCallbackProc = function(i: Integer): Boolean; stdcall;
  PCallbackProc = ^TCallbackProc;

procedure DoSomething(cbp: PCallbackProc); stdcall;
var
  i: Integer;
  CallbackProc: TCallbackProc;
begin
  if Assigned(cbp) then
  begin
    @CallbackProc := cbp;
    for i := 0 to 9 do
      if not CallBackProc(i) then
        break;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DoSomething(@Callback);
end;

NicoDE 31. Mär 2006 07:53

Re: Was ist eine Callback Funktion
 
Zitat:

Zitat von Luckie
Bei mir funktioniert beides.

Hängt vom jeweiligen Compiler und dessen aktuellen Optionen ab.
Dadurch entstehen Codefragmente wie dieses:
Delphi-Quellcode:
DllProcNext := TDLLProc(DllProc);
TDLLProc(DllProc) := LibraryProc;

Luckie 31. Mär 2006 08:20

Re: Was ist eine Callback Funktion
 
Wie wäre es denn jetzt korrekt? Bzw. wie macht es Windows? Da wird ja auch immer ein zeiger erwartet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:46 Uhr.
Seite 3 von 4     123 4      

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