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);

NEXT PROBLEM

 それでもって目下の問題はLua側のコンソール出力を拾う方法です。.NET側のConsole.WriteLineは拾えるのですが、Luaが出力したものは拾えていません。この件は保留してできるところを進めています。