Referenz - STDCALL
Syntax: [DECLARE] {SUB | FUNCTION} prozedurname STDCALL [OVERLOAD] [ALIAS "externerName"] [(parameterliste) ...] {AS rueckgabetyp} {CONSTRUCTOR [priorität]} [STATIC] [EXPORT]
Typ: Schlüsselwort
Kategorie: Bibliotheken
Die STDCALL-Aufrufkonvention ist die Standard-Aufrufkonvention für FreeBASIC und die Microsoft Win32-API.
Wird in der Deklaration keine Angabe zur Aufrufkonvention gemacht, benutzt FreeBASIC 'STDCALL'.
Angegebene Parameter werden von rechts nach links ( <- ) übergeben, der letzte angegebene Parameter wird also als erster auf den Stack gelegt. Die aufgerufene Funktion muss den Stack vor dem Rücksprung mit RET XX (Return, Anzahl Byte) ausgleichen.
STDCALL kann nicht mit variabler Argumenten-Anzahl (siehe ... ) verwendet werden.
STDCALL ist die Aufrufkonvention, die standardmäßig unter Windows verwendet wird, sofern keine andere Konvention explizit festgelegt oder durch einen EXTERN-Block impliziert wird. Es ist außerdem die gebräuchlichste Konvention in BASIC-Dialekten und in der Windows-API.
Beispiel 1:
#Include "fbgfx.bi"
'SCREEN 18,32
Asm
push 0 '5. Parameter optional
push 0 '4. Parameter optional
push 0 '3. Parameter optional
push 32 '2. Parameter Farbbits
push 18 '1. Parameter Screenmodus
call _fb_GfxScreen@20
End Asm
Die aufgerufene Funktion (im Beispiel '_fb_GfxScreen@20') nimmt die Werte vom Stack und bereinigt den Stack.
Der x86-Befehl RET (Return) erlaubt als Parameter einen optionalen Byte-Wert, der die Größe des abzubauenden Stacks angibt (RET 20).
Beispiel 2: Vergleich der verschiedenen Aufrufmöglichkeiten
Sub s StdCall (s1 As Integer, s2 As Integer)
Print "StdCall ", s1, s2
End Sub
Sub c Cdecl (c1 As Integer, c2 As Integer)
Print "Cdecl ", c1, c2
End Sub
Sub p Pascal (p1 As Integer, p2 As Integer)
Print "Pascal ", p1, p2
End Sub
Asm
push 2 '2. Parameter - s2
push 1 '1. Parameter - s1
Call s 'rechts nach links
push 2 '2. Parameter - c2
push 1 '1. Parameter - c1
Call c 'rechts nach links
Add esp, 8 'der Stack muss durch die aufrufende Funktion aufgeräumt werden
push 1 '1. Parameter - p1
push 2 '2. Parameter - p2
Call p 'links nach rechts
End Asm
Sleep
Unterschiede zu QB: neu in FreeBASIC
Siehe auch:
DECLARE, CDECL, PASCAL, Module (Library / DLL)
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|