SWIG如何使用Lua的表来操纵访问来自AC结构的字节数组在Lua(SWIG how to acce

2019-10-21 02:52发布

我想从Lua访问交流结构一个阵列。 我想访问它的字节数组。 我知道我必须以某种方式使用typemaps但我无法得到它的工作就像我想。

该结构是如果在所有问题一个命名空间中定义。 在这个例子中我称之为headerfile send.h

namespace foo{
namespace bar{

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

}};

所以,我希望能够从从Lua的C结构访问无符号的字符数据数组。 我想访问它像数字的表。 在这里我的Lua脚本代码,我想用。

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

msg.data[1] = 0x3b

print(msg.data[1])

所有我得到的是像“试图索引字段‘数据’(一个用户数据值)”的错误我做了一些研究,发现我必须添加某种类型映射%魔法来面对这一切。 但我无法确切地弄清楚如何。

所以在这里我的问题:

  • 有人能指出我该方案的工作的例子吗?
  • 我应该申请什么样的类型映射的?
  • 如何申请这种类型映射只对这种结构,而不是别人呢?

Answer 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"
%}


文章来源: SWIG how to access a byte array from a c struct in Lua using a Lua table to manipulate