遍布网络的Lua教程显示使用lua_register()来公开扩展DLL中实现的函数:
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
static int pushlua3(lua_State *L)
{
lua_pushnumber(L, 3);
return 1;
}
int luaopen_lua3pushbinder(lua_State *L)
{
lua_register(L,"pushlua3", pushlua3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
lua_register() 是宏而不是函数,这是来自5.2手册:
http://www.lua.org/manual/5.2/manual.html#lua_register
[-0,+ 0,e]
Run Code Online (Sandbox Code Playgroud)void lua_register (lua_State *L, const char *name, lua_CFunction f);将C函数f设置为全局名称的新值.它被定义为一个宏:
Run Code Online (Sandbox Code Playgroud)#define lua_register(L,n,f) \ (lua_pushcfunction(L, f), lua_setglobal(L, n))
如果你单独使用这些函数,lua_pushcfunction很好,但是lua_setglobal崩溃了,因为它试图引用LUA_GLOBALSINDEX并且在运行时失败,而不是编译时.
那么现在实现lua_register()的正确方法是什么?
我有点想到,当Lua移动到5.2并重新使用LUA_GLOBALSINDEX和lua_register()表示的概念时,更改lua_register()以便它以"新"方式执行它是合理的.
那么,有没有Ubuntu没有为lua5.2选择的标题更新?我应该有一个指向的路径,/usr/include/lua5.2然后我不会遇到这个问题?我的盒子上只有一个Lua 5.1 include目录.
tnx可以提供任何帮助.