让我们考虑以下C函数:
void returnMultipleValuesByPointer(int* ret0, int* ret1, int* ret2)
{
*ret0 = 0;
*ret1 = 1;
*ret2 = 2;
}
如何使用LuaBridge在Lua中公开它?所有文档和示例都说明了指向对象是类的复杂情况,但我找不到如何处理这样一个简单的情况......
琐碎的方法(即luabridge::getGlobalNamespace(L).addFunction("test", &returnMultipleValuesByPointer))
编译,但不理解值将通过地址传递。
答案 0 :(得分:2)
你不能直接这样做。您必须编写一个包装器方法,将参数转换为返回值。这需要编写这样的方法。例如,如果这些是纯返回值(即:它们不带参数):
int lua_ReturnMultipleValuesByPointer(lua_State *L)
{
int ret0;
int ret1;
int ret2;
returnMultipleValuesByPointer(&ret0, &ret1, &ret2);
lua_pushinteger(L, ret0);
lua_pushinteger(L, ret1);
lua_pushinteger(L, ret2);
return 3;
}
您需要使用“addCFunction”进行注册,因为它是标准的Lua函数。
答案 1 :(得分:0)
如果您想要做的是:
a=0
b=0
c=0
test(a,b,c)
-- NOW a is 0, b is 1, c is 2
我不认为这是可能的。你应该恢复这样的lua调用:
a,b,c=test()
现在,测试可以这样宣布:
luabridge::getGlobalNamespace(L).addCFunction("test", &returnMultipleValues)
int returnMultipleValues (lua_State* L) {
push(L,0);
push(L,1);
push(L,2);
return 3;
}