2014-10-07 31 views
1

從c結構中訪問字節數組我試圖從Lua的c結構中訪問數組。我想以字節數組的形式訪問它。我知道我必須以某種方式使用 typemaps,但我無法像我想的那樣使用它。SWIG如何從Lua中的c結構使用Lua表來操作

結構是在命名空間內定義的,如果這件事情在所有。在這個例子中 我稱之爲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]) 

所有我得到的是這樣的錯誤「試圖索引字段‘數據’(一個用戶數據值)」 我做了一些研究,發現我有某種%類型映射魔法添加到 處理那個。但我無法弄清楚如何。

所以在這裏我的問題:

  • 有人能指出我的那種情況下的工作的例子嗎?
  • 我應該使用哪種類型的地圖?
  • 我該如何將這種類型映射僅應用於此結構而不應用於其他結構?

回答

0

所以,最後我明白了通過使用下面的typemap我能夠以我想要的方式訪問數據成員。希望能幫助別人。

%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" 
%} 
+0

嗨!我有幾乎相同的問題,因爲你的(http://stackoverflow.com/questions/29724937/lua-swig-set-get-float-array)但是使用你的解決方案它不適合我。您確定可以使用此解決方案設置並打印正確的值? – McBob 2015-04-20 02:56:16