我正在尝试在Windows上创建一个Lua dll扩展。我使用的是Lua 5.3版本,并且我的编译器来自于MinGW,版本是gcc 4.9.3。
我的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;
}
我这样编译我的动态链接库:
gcc mylib.c -shared -o mylib.dll -llua
这个想法是我可以从Lua中加载它并像这样使用它:
require "mylib"
print (dub(5)) --should print 10
然而,当我尝试运行Lua代码时,它在
require "mylib"
行崩溃了。该DLL能够打印出"One"和"Two",但它在打印出"Three"之前就崩溃了。这告诉我问题可能出在'lua_setglobal'调用上。出了什么问题?如何进一步调试或修复它?
额外的问题:luaopen_mylib的返回值应该是什么?
谢谢!
__cdecl
:http://lua-users.org/wiki/LoadLibrary 将其更改为__stdcall
会使 'require()' 调用显示 "找不到指定的程序。" - luaboy