呼び出し規約とは?stdcallとはなんぞや?という話。

昔WindowsCEプラットフォームで製品開発していた時も、素のWin32APIを叩いてテストアプリを作ったりしていたけれど、今思うとあまり理解しないままに使って作っていたんだなぁ…と、今更ながら思う。

上のリンク先、「関数を呼び出すということ」なんて超基本じゃん!などと思うなかれ、かなり深いところまで掘り下げて解説されています。
最も具体的で身近な例としては、「Win32APIと標準Cライブラリとでは、スタックの巻き戻し方が違うんだよ」という点です。そうだったんだ!と、目から鱗でした^^;
そんな__stdcallの規約、大元の情報は以下のMicrosoft本家ページに記載されています。

Cライブラリはこちらです。

ちなみに、上記の規約ページでも触れていますが、スマホなどの組み込み機器で確固たる地位を築き上げたARMプロセッサは、インテルのx86プロセッサとは全く異なるCPUなので、当然規約も違います。
検索したら、ARM社ではなく、なぜかMicrosoft の解説ページがトップに出てきたんですが… そのままリンク貼っちゃいます^^;

なんでこんなもん調べだしたのかというと…
今後仕事でWindows上で動かす業務効率化するスクリプトを書く機会が増えそうで、ならPythonで書いてしまえと思いまして。
その際、サードパーティ提供のdllを使う必要がありまして。
その際に使うctypesパッケージ提供のモジュールが、Win32APIと通常のCライブラリとで異なるみたいなんですよね。

んん?どういうことだ?
と、今までよく理解できていなかったので、上記サイトで分かりやすい解説を読んで勉強させていただいた次第です。
脇道に逸れまくって、本来の目的だったPythonからのWin32API呼び出しを試せていないんですが…。
それはまた後ほど。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

Close Bitnami banner
Bitnami