__stdcall とは何ですか?

__stdcall 関数に使用される呼び出し規約です。これにより、スタックの設定、引数のプッシュ、戻り値の取得に適用される規則がコンパイラに伝えられます。

__cdecl など、他にも多くの呼び出し規約があります。 、 __thiscall__fastcall そして素晴らしい名前の __declspec(naked) . __stdcall は、Win32 システム コールの標準呼び出し規約です。

ウィキペディアが詳細をカバーしています。

これは主に、コード外の関数 (OS API など) を呼び出している場合、または OS が呼び出している場合 (ここでは WinMain の場合のように) に重要です。コンパイラが正しい呼び出し規則を認識していない場合、スタックが正しく管理されないため、非常に奇妙なクラッシュが発生する可能性があります。


C または C++ 自体は、これらの識別子を定義しません。これらはコンパイラの拡張機能であり、特定の呼び出し規約を表しています。これにより、引数を配置する場所、順序、呼び出された関数が戻りアドレスを見つける場所などが決まります。たとえば、__fastcall は、関数の引数がレジスタを介して渡されることを意味します。

ウィキペディアの記事では、そこにあるさまざまな呼び出し規約の概要を説明しています。


これまでの回答で詳細を説明しましたが、アセンブリにドロップダウンするつもりがない場合は、呼び出し元と呼び出し先の両方が同じ呼び出し規則を使用する必要があることだけを知っておく必要があります。そうしないと、バグが発生します。