我正在尝试让 Lua 使用新的编程语言 D。
一切正常(库、lua52.dll 等),但 luaL_getmetatable
崩溃。
原来dlua中没有定义函数,但是我加了:
//C #define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
void luaL_getmetatable(lua_State* L, const(char)* s) {
lua_getfield(L, LUA_REGISTRYINDEX, s);
}
但是当我运行时:
L = lua_open();
luaL_openlibs(L);
// prevent script kiddies
luaL_dostring(L, "os = nil; io = nil");
// reprogram 'print'
luaL_newmetatable(L, "vector");
luaL_getmetatable(L, "vector"); // CRASH
它崩溃了。任何想法为什么会这样?
最佳答案
听起来您使用的是古老的 dlua绑定(bind),而不是 LuaD , 一直有 luaL_getmetatable
.
但是,这些绑定(bind)以及您的代码都适用于 Lua 5.1,而不是 5.2;确保链接到正确版本的 Lua。 Lua 5.2 中没有 lua_open
(在 5.1 中已弃用)。
如果您在链接到正确的库后遇到同样的问题,我建议您在编译 Lua 时设置宏 LUA_USE_APICHECK
并再次尝试查看到底出了什么问题。
关于lua - D Lua 不能被元化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10316585/