外部関数の呼び出し時には、双方の処理方法が一致するようにキーワードを指定します。
キーワード | スタックのクリーンアップ | 引数渡し規約 | スタック メンテナンスの役割 | 名前装飾規約 | 大文字と小文字の変換規約 | 用途 |
---|---|---|---|---|---|---|
__cdecl | 呼び出し元 (Caller) | 逆順 (右から左) で、スタックにパラメータをプッシュする | 呼び出し元の関数によって、スタックから引数がポップされる | 名前の前にアンダースコア (_) が付けられる。ただしCリンケージを使用する__cdecl関数をエクスポートする場合は除く | 変換されない | CとC++プログラムの呼び出し |
__stdcall | 呼び出し先 (Callee) | 逆順 (右から左) で、スタックにパラメータをプッシュする
ポインターまたは参照型が渡されない場合は、値渡し |
呼び出された関数が、自分の引数をスタックからポップする | 名前の前にアンダースコア (_) が付けられ、名前の後にアットマーク (@) と引数リストのバイト数 (10進数) が続く。したがってint func(int a,double b)として宣言された関数は「_func@12」のように修飾される | --- | Win32 API関数の呼び出し |
__clrcall | なし | Load parameters onto CLR expression stack in order (left to right). | マネージコードからの呼び出し | |||
__fastcall | 呼び出し先 (Callee) | 左から右への引数リストで見つかる最初の2つのDWORDまたはこれより小さい引数は、ECXおよびEDXレジスタに渡される。他の引数はすべてスタック上で右から左へ渡される | 呼び出された関数によって、スタックから引数がポップされる | 名前の前にアットマーク (@) が付けられる。パラメーター リストでバイト数 (10進数) が後続するアットマークは、名前に後に付けられる | 変換されない | |
__thiscall | 呼び出し先 (Callee) | Pushed on stack; this pointer stored in ECX | ||||
__vectorcall | 呼び出し先 (Callee) | Stored in registers, then pushed on stack in reverse order (right to left) | --- | 名前の後に2つのアットマーク (@@) とそれに続くパラメーター リストのバイト数 (10進数) が付けられる | 変換されない |
return-type __stdcall function-name[(argument-list)]__stdcall | Microsoft Learn