Ich habe einen Code aus der SDL -Bibliothek gelesen und bin auf eine Funktion gestoßen, die folgendermaßen deklariert wurde:
%Vor%Nun, ich bin ein Delphi-Programmierer. Kein Habo C muy bien, Senor. Aber ich erinnere mich genug Syntax von meinen College-Kursen, um es so zu lesen:
Funktionsname ist WndProc. Die Argumentliste ist ziemlich selbsterklärend. Funktionsrückgabetyp ist LRESULT. Aber was in aller Welt macht das "CALLBACK" dort? In Delphi kann jede Funktion als Callback verwendet werden; Sie müssen nur die richtige Art von Funktionszeiger übergeben. Gibt es einen besonderen Grund, warum C nicht so funktioniert? Oder bedeutet es etwas anderes?
Kurze Zusammenfassung von Raymond Chens Blog:
Das Schöne am Rufen Konventionen auf der x86-Plattform ist Es gibt so viele zur Auswahl!
C Aufrufkonvention (__cdecl)
Die C-Aufrufkonvention ist eingeschränkt, weil sie die Verwendung von Funktionen mit einer variablen Anzahl von Parametern erlaubt. Es erfordert ziemlich genau, dass der Stapel vom Aufrufer bereinigt wird und dass die Parameter von rechts nach links geschoben werden, so dass der erste Parameter an einer festen Position relativ zur Oberseite des Stapels ist. Zusammenfassend: Der Anrufer reinigt den Stapel, die Parameter werden von rechts nach links geschoben.
Pascal-Aufrufkonvention (__pascal )
Pascal unterstützt keine Funktionen mit einer variablen Anzahl von Parametern, so dass es die callee-clean-Konvention verwenden kann. Parameter werden von links nach rechts geschoben. Fast alle Win16-Funktionen werden als Pascal-Aufrufkonvention exportiert. Die callee-clean-Konvention speichert drei Bytes an jedem Aufrufpunkt mit einem festen Aufwand von zwei Bytes pro Funktion. Es war auch etwas schneller. Auf Win16 war das Speichern einiger hundert Bytes und einiger Zyklen eine große Sache. Hinweis: Die Fortran-Aufrufkonvention (__fortran) entspricht der Pascal-Aufrufkonvention
Es ist die Aufrufkonvention. Es ist erforderlich, wenn Sie einen Zeiger auf diese Funktion an eine Windows-API übergeben, die diese Funktion später aufruft. Die Windows-Aufrufkonvention unterscheidet sich von der C-Aufrufkonvention. Daher müssen Sie dem Compiler angeben, dass WndProc () speziell ist und einen anderen Start- und Bereinigungscode benötigt.
Es ist eine Aufrufkonvention, und Delphi hat sie auch. Versuchen Sie in der Delphi-Hilfe nach 'cdecl' zu suchen. In Delphi (oder Object Pascal, wie wir Oldies es gerne nennen) kommen Aufrufkonventionen nach der Funktionsdeklaration, so;
%Vor%