使用LuaBridge与内置类型的指针

让我们考虑以下 C 函数:

void returnMultipleValuesByPointer(int* ret0, int* ret1, int* ret2)
{
    *ret0 = 0;
    *ret1 = 1;
    *ret2 = 2;
}

如何使用 LuaBridge 在 Lua 中暴露它?所有的文档和例子都演示指向对象为类的复杂情况,但我找不到如何处理这样简单的情况…

简单的方法(即 luabridge::getGlobalNamespace(L).addFunction("test", &returnMultipleValuesByPointer)) 编译通过,但没有理解需要通过地址传递值。

点赞
用户1130744
用户1130744

如果你想做类似这样的事情:

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()

现在,test 可以这样声明:

luabridge::getGlobalNamespace(L).addCFunction("test", &returnMultipleValues)

int returnMultipleValues (lua_State* L) {
    push(L,0);
    push(L,1);
    push(L,2);
    return 3;
}
2013-01-10 09:46:37
用户734069
用户734069

你不能直接这样做。你需要编写一个包装方法,将参数转换为返回值。这需要编写这样的一个方法。例如,如果这些是纯返回值(即:它们不带参数):

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函数。

2013-01-10 19:52:03