美文网首页
luajit ffi 使用

luajit ffi 使用

作者: 小二郎的爸爸 | 来源:发表于2016-09-11 10:53 被阅读0次

    结构定义

    首先需要使用ffi.cdef定义需要的结构体,如下:

    ffi.cdef[[
        #pragma pack(1)
        typedef struct point{
            int x;
            int y;
            char  text[128];
        }point_t;
        #pragma pack()
    ]];
    

    Lua中创建结构对象

    使用ffi.new创建新的结构对象

    cdata = ffi.new(ct,   [init])
    

    如初始化一个point_t对象

    local p1 = ffi.new('point_t', {x=10, y=20, text='first point'});
    

    访问结构成员

    直接使用.操作符即可。如p1.x,p1.y等。

    如果是字符串的话,需要使用字符串转换函数

      ffi.string(ptr,  [ len])
    

    带长度是内存拷贝,不带长度是自动以\0结束。

    转换成内存块

    1. 先转换成void指针 pdata = ffi.cast('void', p1)
    2. 在转换成lua string, ffi.string(pdata, ffi.sizeof(p1))

    从内存块转换成

      local p = ffi.cast('point_t *', st)
    

    转换的结果是一个指针对象

    数组处理

    原型

    local p =  ffi.new('ct[?]', length, [init..])
    

    分配字符串数组

      local p = ffi.new('char[?]', 1000)
    

    数组的访问下标需要从0开始

    相关文章

      网友评论

          本文标题:luajit ffi 使用

          本文链接:https://www.haomeiwen.com/subject/yomyettx.html