関数の呼び出し形式
(1999/06/16 [水])
Microsoft 系のコンパイラでは、関数/手続きの呼び出し方にはいくつかの方法があります。そのためには、修飾子を使用して関数を修飾します。具体的な修飾子には次のようなものがあります。
ちなみに、Win32 API はすべて _stdcall 呼び出しとなっているので、C 言語や C++ 言語から呼び出す時には、かならず _stdcall 修飾子をつけておかないとプログラムが正しく動作しません。SDK で提供されているヘッダファイルにはすべて _stdcall 修飾子がついているので、include するだけでそのまま関数を利用することができます。
またアセンブラでプログラムを記述する場合には、常にこの呼び出し形式に気をつける必要があります。
呼び出し形式 | 修飾子 | 名前の変形(sub) | パラメータを捨てる方 | 引数の渡し方 |
---|---|---|---|---|
C言語の呼び出し | _cdecl | _sub | 呼び出し側 | 右から左 |
PASCAL言語の呼び出し | _pascal | SUB | 呼び出された側 | 左から右 |
Win32 呼び出し | _stdcall | sub | 呼び出された側 | 右から左 |
高速呼び出し | _fastcall | @sub | レジスタ、呼び出された側 | レジスタ、左から右 |
ちなみに、Win32 API はすべて _stdcall 呼び出しとなっているので、C 言語や C++ 言語から呼び出す時には、かならず _stdcall 修飾子をつけておかないとプログラムが正しく動作しません。SDK で提供されているヘッダファイルにはすべて _stdcall 修飾子がついているので、include するだけでそのまま関数を利用することができます。
またアセンブラでプログラムを記述する場合には、常にこの呼び出し形式に気をつける必要があります。
by seclan