lua 中 呼叫 union 物件

2021-05-23 06:08:13 字數 1343 閱讀 8089

最近用luatinker發現真的挺好用,不僅可以輕鬆把 c++ 中 class 和 struct 物件導給 lua來呼叫, 而且連union 物件一樣可以支援。

和 class 一樣,乙個union 如果需要讓 lua中能建立能使用 ,必須呼叫 class_add,class_con,class_mem 來把 union 的 名字,構造,和 成員都暴露給lua ,所不同的是 class裡面把成員變數暴露給lua,而union需要把union裡所有嵌入的結構體,類或是預設型別都暴露給lua。

lua_tinker::class_add(m_pluasate, "udatachunk");

lua_tinker::class_con(m_pluasate, lua_tinker::constructor);

lua_tinker::class_mem(m_pluasate, "int8",&udemodatachunk::ndata8);

lua_tinker::class_mem(m_pluasate, "int16",&udemodatachunk::ndata16);

lua_tinker::class_mem(m_pluasate, "int32",&udemodatachunk::ndata32);

lua_tinker::class_mem(m_pluasate, "uint8",&udemodatachunk::ndatau8);

lua_tinker::class_mem(m_pluasate, "uint16",&udemodatachunk::ndatau16);

lua_tinker::class_mem(m_pluasate, "uint32",&udemodatachunk::ndatau32);

lua_tinker::class_mem(m_pluasate, "float",&udemodatachunk::ffloat);

使用的時候其實和class 也差不多,下面是指令碼裡取和寫的例子

print(dest:getdatachunk(0).int16)

data = udatachunk()

data.int16 = -5000

dest:chgdatachunk(0,data,1)

其中需要注意的是 data是在lua中申請建立的,但是lua並不管這個臨時物件的釋放,因為不是它去申請的記憶體,而是通過c++這邊的構造,所以在chgdatachunk這個介面函式裡面需要把傳入的union物件進行刪除

還有一點不由得再誇一下luatinker了,不管getdatachunk介面函式返回的是union 物件,還是union的指標,甚至是union的引用,

dest:getdatachunk(0).int16 的這種寫法都能識別出真正int16中所在的位置

Lupa Python中呼叫Lua 收藏

lupa將luajit整合到了python模組中,可以在python中執行lua 比較有意思,也許以後用的著,記錄一下。基本用法 import lupa from lupa import luaruntime lua luaruntime lua.eval 1 1 2 lua func lua.ev...

Lua中呼叫C函式

lua利用乙個虛擬的堆疊來給c傳遞值或從c獲取值。每當lua呼叫c函式,都會獲得乙個新的堆疊,該堆疊初始包含所有的呼叫c函式所需要的引數值 lua傳給c函式的呼叫實參 並且c函式執行完畢後,會把返回值壓入這個棧 lua從中拿到c函式呼叫結果 1 typedef struct lua state lu...

在lua中呼叫DLL

整整的花了乙個下午的時候,才在lua中呼叫了動態鏈結庫。比起其他指令碼語言,lua的呼叫方式算是比較繁瑣的,但是lua的程式設計思想非常的統一,即lua和c之間的傳值都是通過棧進行的,目前為止我還沒有深入的去了解這個 棧 但是這並不妨礙去使用 棧 當我們在乙個空的工程中寫下幾個c c 的函式,然後把...