1. ホーム
  2. c++

[解決済み] stdcallの意味と使い方を教えてください。

2023-05-17 17:40:07

質問

私は __stdcall をよく見かけるようになりました。

MSDN では、それが本当に何を意味するのか、いつ、なぜ使うべきなのか、もし使うのであれば、あまり明確に説明されていません。

私は、誰かが、できれば1つか2つの例とともに、説明を提供してくれることを感謝します。

どのように解決するのですか?

C/C++のすべての関数には、特定の呼び出し規約があります。 呼び出し規約のポイントは、呼び出し元と呼び出し先の間でどのようにデータが渡されるか、また、呼び出しスタックを整理するなどの操作に誰が責任を負うかを確立することです。

Windowsで最も人気のある呼び出し規約は

  • __stdcall , 逆順(右から左)に、スタックにパラメータをプッシュします。
  • __cdecl スタック上のパラメータを逆順に(右から左へ)プッシュします。
  • __clrcall , パラメータをCLR式スタックに順番に(左から右に)ロードします。
  • __fastcall , レジスタに格納された後、スタックにプッシュされます。
  • __thiscall スタックにプッシュされ、このポインタはECXに格納されます。

関数宣言にこの指定子を追加することは、本質的に、この特定の関数にこの特定の呼び出し規則を持たせたいことをコンパイラに伝えることになります。

呼び出し規約はこちらで説明されています。

Raymond Chen もまた、さまざまな呼び出し規則の歴史について、ここから始まる長いシリーズ (全 5 部) を行っています。