gpt4 book ai didi

c - Lua 5.2 无法访问 C 库中的函数

转载 作者:行者123 更新时间:2023-12-04 10:47:38 25 4
gpt4 key购买 nike

我写了这个简单的库:

#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。

最佳答案

or 是 Lua 中的保留字(它是逻辑或运算符)。这就是为什么 Lua 中所有现有的按位运算库都将 or 函数命名为 borandnot 同样保留。 (保留字的完整列表可以在 here 中找到。)

您仍然可以使用字符串调用它:

print(mybit["or"](1,2,3))
print(mybit["or"])

但是您最好遵循现有的按位运算库的示例并将其命名为 以外的名称。

关于c - Lua 5.2 无法访问 C 库中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19118176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com