ctypesの三つのロード方法
ctypesではDLLのロード方法が三つある。
cdll、windll、oledllの三つだが、その違いはcallされた時のスタックの扱いと、戻り値だ。
ややっこしいのでまとめてみる。
cdllで呼び出すべき関数
- cdecl呼び出し規約に従う
- intを返す
windllで呼び出すべき関数
- stdcall呼び出し規約に従う
- intを返す
oledllで呼び出すべき関数
- stdcall呼び出し規約に従う
- HRESULTを返す
cdeclとstdcallの違いは、Wikipediaが詳しい。
要は、引数をスタックにpushして関数を呼び出すのは同じだが、そのスタックを元に戻す責任があるのが、呼び出された関数側なのか、呼び出した側なのかの違い。