LuaJitDotNet(仮称) / デリゲートの呼び出し規則
id:NyaRuRuさんより的確なコメントをいただきましたので、まとめておきたいと思います。大変ありがとうございます。
『>C#のデリゲートが__stdcallしかサポートせず
C# の制限というよりは,CLR 側の問題ですかね.DLLImport 経由なら DllImportAttribute.CallingConvention パラメータ,Marshal.GetDelegateForFunctionPointer なら UnmanagedFunctionPointer 属性の CallingConvention パラメータで制御できます.
以下の記事なども参考になるかと.
http://codezine.jp/a/article.aspx?aid=444&p=4昔ながらの MSIL エンジニアリングで行くなら,「ILGenerator LoadLibrary」で検索しても色々出てくるかと.
今だと Lightweight Code Gen があるからかなり楽ですね.』 (2006/09/23 17:20)
DLLImportのCallingConventionは利用していたのですが、デリゲートに対応する [UnmanagedFunctionPointer(CallingConvention.Cdecl)] の存在に気づきませんでした。改変版はすでに作ったものの保守を考えるとLuaJIT側を改変しない方法は非常に助かります。
実際の解法は次のようになりました。
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int LuaFunction(lua_State lua);