【问题标题】:SWIG how to access a byte array from a c struct in Lua using a Lua table to manipulateSWIG 如何使用 Lua 表从 Lua 中的 c 结构访问字节数组以进行操作
【发布时间】:2014-12-01 18:10:00
【问题描述】:

我正在尝试从 Lua 访问 c 结构中的数组。我想以字节数组的形式访问它。我知道我必须使用 typemaps 不知何故,但我无法让它像我想要的那样工作。

如果这很重要,结构是在命名空间中定义的。对于这个例子 我将头文件称为 send.h

namespace foo{
namespace bar{

typedef struct 
{
    ...
    unsigned char data[8];
} message;

}};

所以我希望能够从 Lua 的 c 结构访问 unsigned char 数据数组。 我想像访问带有数字的表格一样访问它。这是我想要的 Lua 脚本代码 使用。

modul = require("MyModule")
msg = modul.message()

msg.data[1] = 0x3b

print(msg.data[1])

我得到的只是一个错误,例如“尝试索引字段'数据'(用户数据值)” 我做了一些研究,发现我必须添加某种 %typemap 魔法 处理那个。但我无法弄清楚到底是怎么回事。

所以这里是我的问题:

  • 谁能指出该场景的工作示例?
  • 我应该应用哪种类型映射?
  • 如何才能将这样的类型映射仅应用于此结构而不应用于其他结构?

【问题讨论】:

    标签: c++ arrays struct lua


    【解决方案1】:

    所以,最后我发现通过使用下面的类型映射很简单,我能够以我想要的方式访问数据成员。希望对其他人有所帮助。

    %typemap(out) unsigned char foo::bar::message::data[8]
    {
        int i;
        int32_t _size = 8;
    
        lua_newtable(L);
        for (i = 0; i < _size; i++)
        {
            lua_pushnumber(L, (lua_Number)$1[i]);
            lua_rawseti(L, -2, i + 1);
        }
    
        SWIG_arg++;
    }
    
    %include "send.h"
    %{
    #include "send.h"
    %}
    

    【讨论】:

    • 嗨!我和你的问题(stackoverflow.com/questions/29724937/…)几乎一样,但是使用你的解决方案对我不起作用。您确定可以使用此解决方案设置并打印正确的值吗?
    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 2016-04-11
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2018-11-06
    相关资源
    最近更新 更多