役に立ちそうもないTips移転版

俺得なTipsを書き連ねるだけのブログ。

関数呼び出し規約の備忘録

備忘録というかブクマですが。

まず呼び出し規約ってなんじゃらほい、について。
関数呼び出しの内部を理解する(2)

で、注意点。
・(少なくともWindowsでは)32ビットプロセスは64ビットDLLをロードできない。逆も同じ。
 ただし、32ビットCOMサーバは64ビットプロセスと対話できる。
Windows x64では呼び出し規約はfastcallのみになったらしい。
参考: Akihiro Notes: Microsoft x64 呼び出し規約
VBA、レガシVBのDeclareによるDLLリンクはstdcall規約の関数しかだめ。
 たしかJNIもそーだったような。
 (……64ビットOfficeのVBAとか64ビットJavaはどーなんだろう?
VBAのほうは単純にDeclareでおkっぽい。JNIは……ヘッダで吸収するんかな?)
・.netのDllImportはv2.0から関数ごとに呼び出し規約を指定できる。デフォルトStdCall。
 ただ、これFastCallは(指定できるEnumには定義はあるけど)サポートしてない。
 てことはC#/VB.netからは64ビットDLLは今のところ(現在最新が.net v4.5)なんかしらハックしないと呼べない?
(まあ、素直にC++/CLIでブリッジ作れやってことなんかもしれんけど)