首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将LuaBridge与指向内置类型的指针一起使用

将LuaBridge与指向内置类型的指针一起使用
EN

Stack Overflow用户
提问于 2013-01-10 09:30:12
回答 2查看 863关注 0票数 0

让我们考虑一下下面的C函数:

代码语言:javascript
复制
void returnMultipleValuesByPointer(int* ret0, int* ret1, int* ret2)
{
    *ret0 = 0;
    *ret1 = 1;
    *ret2 = 2;
}

如何使用LuaBridge在Lua中公开它?所有的文档和示例都说明了指向的对象是类的复杂情况,但我找不到如何处理如此简单的情况……

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-11 03:52:03

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

代码语言:javascript
复制
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函数。

票数 2
EN

Stack Overflow用户

发布于 2013-01-10 17:46:38

如果你想要做的事情是:

代码语言:javascript
复制
a=0
b=0
c=0
test(a,b,c)
-- NOW a is 0, b is 1, c is 2

我认为这是不可能的。您应该恢复为lua调用,如下所示:

代码语言:javascript
复制
a,b,c=test()

现在,可以这样声明test:

代码语言:javascript
复制
luabridge::getGlobalNamespace(L).addCFunction("test", &returnMultipleValues)

int returnMultipleValues (lua_State* L) {
    push(L,0);
    push(L,1);
    push(L,2);
    return 3;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14249438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档