「お昼の放送」の思い出

DWORD WINAPI MyThread(LPVOID lpdata)
{
     //省略
}
のWINAPIはどいう意味なのでしょうか?

A 回答 (2件)

関数の呼び出し規約です。


原理上、関数を呼び出す時の引数の渡し方には幾つかの方法があり一長一短もあるのですが、
実際に使うに際しては、それらが一致していないと、不正動作をすることになります。
# VC等ではオプションでデフォルトを指定することもできますが、
# 大抵はstdcallを指定しないとcdeclという規約になります。

Windowsにおいては、Win32とのインタフェースは原則としてstdcallと呼ばれる呼び出し規約を使うと、
Microsoftが決めており、WINAPIと書いたらプログラマが直接意識しなくてもstdcallになるようにしています。
例えばCreateThread APIはstdcallなコールバック関数を要求するので、
そこに渡す関数にはWINAPIの指定が必要です。
(CALLBACKというマクロなども実装上は同様にstdcallになります)
    • good
    • 0
この回答へのお礼

CALLBACKも同じなのですね。わかりました。回答ありがとうございました。

お礼日時:2009/04/11 22:49

WINAPIは


#define WINAPI __stdcall
と定義されています。

じゃあ、__stdcallが何かというと、
関数間の値の受け渡しをスタックとレジスタを使ってどう受け渡すかと言う規約の種類を表します。
この__stdcallは、マイクロソフトのスタンダートだと言う意味になります。
Wikiのstdcallを参照。
http://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA% …
たぶん、アセンブラを理解してスタックフレームの構造を知らないと意味が分らないんじゃないかと思います。

ライブラリと呼び出すがの同じ種類のコンパイラ(VCやVBやPascal)でマイクロソフト社製とは限りませんので、こうした規約でデータの受け渡し方法を保障するわけです。
    • good
    • 0
この回答へのお礼

アセンブラですか・・・回答ありがとうございました。

お礼日時:2009/04/11 22:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!