luajit ffi 使用

结构定义

首先需要使用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 使用)