手続きの宣言の中で、
stdcall-スタイル 呼び出し規則 を指定します。
構文:
記述:
手続きの宣言で、
Stdcall は、手続きが、
Stdcall 呼び出し規則を使用する、と指定します。
Stdcall 呼び出し規則では、どんなパラメータも、そのリストの逆順(すなわち右から左の順)に渡される(スタックに押しつける)ことになっています。
手続きは、
EAX,
ECX または
EDX レジスタを保持する必要はなくて、戻る前に、手続きは、スタックを消去(全てのパラメタをポンと出す)しなければなりません。
Stdcall は、可変個引数の手続きの宣言(最後のパラメタが "
..." としてリストアップされている)と一緒には使えません。
Stdcall は、Windows でデフォルトの呼び出し規則です。他の呼び出し規則が明示的に指定されるか、
EXTERN blocks の1つによってほのめかされた場合に限り、呼び出し規則が変わります。
Stdcall は、また、BASIC 言語と Windows API で使われる標準の(または最も一般的な)呼び出し規則です。
手続き定義に宣言が(呼び出し規約が明示的またはデフォルトで)あり 、その定義で呼び出し規約が明示的に指定されていない場合、呼び出し規約は宣言によって暗示されます。
例:
Declare Function Example stdcall (param1 As Integer, param2 As Integer) As Integer
Declare Function Example2 cdecl (param1 As Integer, param2 As Integer) As Integer
Function Example stdcall (param1 As Integer, param2 As Integer) As Integer
' これは STDCALL 関数です。スタック上の最初のパラメーターは param2 です。これは最後に押されたからです。
Print param1, param2
Return param1 Mod param2
End Function
Function Example2 cdecl (param1 As Integer, param2 As Integer) As Integer
' これは CDECL 関数です。スタック上の最初のパラメーターは param1 です。これは最後に押されたからです。
Print param1, param2
Return param1 Mod param2
End Function
プラットホーム差:
-
Windows システム では、Stdcall 手続きは、"@N" 装飾を、内部/外部の名前に追加します。ここで、N は、パラメータ・リストの、バイト単位でのサイズです。
QBからの違い:
参照: