Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - STDCALL

Referenz-Navigation

 

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 Befehlsreferenzeintrag ... ) verwendet werden.

STDCALL ist die Aufrufkonvention, die standardmäßig unter Windows verwendet wird, sofern keine andere Konvention explizit festgelegt oder durch einen BefehlsreferenzeintragEXTERN-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:
BefehlsreferenzeintragDECLARE, BefehlsreferenzeintragCDECL, BefehlsreferenzeintragPASCAL, BefehlsreferenzeintragModule (Library / DLL)


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 04.08.2007 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 24.12.2012 von Redakteurnemored gespeichert.
  Versionen Versionen