WindowsでLua dll拡張子を作成しようとしています。私はLua 5.3を使用しています。私のコンパイラはMinGWのもので、gcc 4.9.3です。dll拡張子のロード時にLuaが壊れる
DLL拡張のための私のCコードは次のようなものです:
#include <stdio.h>
#include <lua.h>
static int dub(lua_State *L) {
const double a = lua_tonumber(L, 1);
lua_pushnumber(L, a*2);
return 1;
}
__declspec(dllexport) int __cdecl luaopen_mylib(lua_State *L){
printf("One\n");
lua_pushcfunction(L, dub);
printf("Two\n");
lua_setglobal(L, "dub");
printf("Three\n");
return 1;
}
私はこのように私のDLLをコンパイルしています:
gcc mylib.c -shared -o mylib.dll -llua
私はLuaのからそれをロードすることができているという考えと
require "mylib"
print (dub(5)) --should print 10
実際にルアコードを実行しようとすると、でクラッシュします行。 DLLは "One"と "Two"を印刷できますが、クラッシュする前に "Three"を印刷することはありません。これは、問題が 'lua_setglobal'呼び出しである可能性があることを示しています。
どうなりますか?それをさらにデバッグする方法や修正する方法は?
ボーナスに関する質問:luaopen_mylibの戻り値は何ですか?
ありがとうございます!
どのような種類のクラッシュですか?それはLuaからスタックトレースを生成しますか? Cセグメンテーション? – Oka
@Oka Windowsのポップアップメッセージ "lua.exeが動作を停止しました"が表示されます。これにはいくつかの詳細がありますが、何も意味がありません。 – luaboy
私はWindowsデベロッパーではありませんが、その詳細は誰かに何かを意味するかもしれません。ヘルプを探すときは、エラーメッセージやレポートを含めることをお勧めします。 – Oka