我写了这个简单的库:
#include "lua.h"
#include "lauxlib.h"
static int l_or(lua_State *l)
{
int i, result = 0;
int nargs = lua_gettop(l);
for(i = 1; i <= nargs; ++i)
{
result |= lua_tointeger(l, i);
}
lua_pushnumber(l, result);
return 1;
}
static const luaL_Reg mybit [] = {
{"or", l_or},
{NULL, NULL} /* sentinel */
};
int __declspec(dllexport) luaopen_mybit (lua_State *L)
{
luaL_newlibtable(L, mybit);
luaL_setfuncs(L, mybit,0);
return 1;
}
编译成一个名为 mylib.dll 的 DLL。
然后我使用以下脚本使用独立的 Lua 解释器进行测试:
print ("Test script")
mybit = require("mybit")
print(mybit)
mybit.or(1,2,3)
--print(mybit.or)
当我运行脚本时,我得到以下输出:
lua: test.lua:6: <name> expected near 'or'
根据我看过的所有示例,这应该是完全可以的。如果我注释掉 mybit.or(1,2,3) 我得到
Test script
table: 005A8EB8
所以我相当有信心图书馆正在加载。我的问题是我不明白为什么我不能使用点运算符访问 or 函数。
我正在使用用 mingw-gcc 编译的 Lua 5.2。