2016-04-14 9 views
2

In der LuaJIT-FFI-Bibliothek können Strukturen initialized from tables sein. Gibt es eine einfache Möglichkeit, das Gegenteil zu tun? Offensichtlich für jede spezifische Struktur ist es einfach, eine Funktion zu schreiben, die es in eine Tabelle umwandelt, aber es erfordert, die Felder zu wiederholen. Leistung ist mir nicht besonders wichtig, dies ist nur zum Debuggen gedacht.Konvertieren von LuaJIT-FFI-Strukturen in Tabellen

Antwort

3

Sie können die Lua-Bibliothek ffi-reflect verwenden, die ffi.typeinfo verwendet, um die internen ctype-Informationen zu lesen, um die Liste der Feldnamen der Struktur zu erhalten.

local ffi = require "ffi" 
local reflect = require "reflect" 

ffi.cdef[[typedef struct test{int x, y;}test;]] 
local cd = ffi.new('test', 1, 2) 

function totab(struct) 
    local t = {} 
    for refct in reflect.typeof(struct):members() do 
    t[refct.name] = struct[refct.name] 
    end 
    return t 
end 

local ret = totab(cd) 
assert(ret.x == 1 and ret.y == 2)