12

私はCでWin32APIを学び始めました。主な機能は次のようなものであることがわかりました。

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) { .. }

しかし、Cの関数は次のようなものだと知っています

[ReturnType] [FunctionName] (Args) { .. }

この場合、戻り値の型はintで、関数名はWinMainです。では、WINAPIは何の略であり、それは必要ですか?

ありがとうございました 。:)

4

3 に答える 3

15

これは、関数への引数がスタックに配置および管理される方法である呼び出し規約を指定しています。

全員が期待どおりに同じ「ページ」にいる限り、Windows APIなどの外部コードを呼び出す場合など、呼び出し規約を混在させることができます。

典型的なc呼び出しは、cdeclとして知られているものを使用してコンパイルされます。cdeclでは、呼び出し元はスタックにプッシュされた引数をクリーンアップします。

「標準呼び出し」とも呼ばれるWINAPIは、呼び出された関数が引数のスタックをクリーンアップする責任があることを意味します。

MSコンパイラはcdecl呼び出しの前に_を付けますが、WINAPIは先頭の_を取得し、関数名をマングルするときに関数名の前に@{BYTES-NEEDED}を追加します。上記のリンクから:

call        _sumExample@8  ;WINAPI
call        _someExample   ;cdecl
于 2012-11-19T22:27:53.313 に答える
4

これは「呼び出し規約」であり、マクロとして定義され、#defineに解決され__stdcallます。

MSDNで詳細を読む:

名前の装飾方法は、言語と、関数を使用可能にするようにコンパイラーに指示する方法、つまり呼び出し規約によって異なります。DLLによって使用されるWindowsの標準のプロセス間呼び出し規約は、WinAPI規約として知られています。これは、WindowsヘッダーファイルでWINAPIとして定義されており、WINAPIはWin32宣言子__stdcallを使用して定義されています。

于 2012-11-19T22:24:47.537 に答える
-9

勝つ-Windows

API-アプリケーションプログラミングインターフェイス

Windowsアプリケーションプログラミングインターフェイス

于 2013-11-23T18:41:37.850 に答える