__stdcall
これは、Win32 API がコールバック関数について想定しているため、#defined asです。これは呼び出し規則です。関数呼び出しが低レベルでどのように配置されるか、CPU スタックでパラメーターがどのように配置されるかなどを記述します。予想されるスタック レイアウトに関する仮定 (つまり、呼び出し規則) は、呼び出し元と呼び出し先の間で一致する必要があります。
歴史的に、Intel CPU には複数の呼び出し規約がありました。Microsoft 以外のコンパイラを数えると、さらに多くなります。C[++] 以外の言語を数えると、Windows API を呼び出したり呼び出したりすることができます。Windows API コールバックが__stdcall
WinAPI の期待に一致するように明示的にマークされていることを確認することをお勧めします。場合によっては、コンパイラと設定に応じて、__stdcall
がデフォルトの呼び出し規則になります (つまり、安全に CALLBACK を省略できます) が、常にそうとは限りません。
Win16 では、CALLBACK は として定義されていましfar pascal
た。特にCプログラムでは、これがユーザー関数のデフォルトになる可能性はさらに低くなります。コールバックが Pascal 呼び出し規則を持っていると想定されていたという事実は、歴史的な成果物でした。また、マイクロ最適化としても機能しました。