AP
Size: a a a
AP
AS
MF
AS
AS
VV
AS
AS
MF
VG
ffi.cdef [[ my_precious_struct_t * my_func(...) ]]
local rv = ffi.C.my_func(...) -- cdata: ctype<my_precious_struct_t>
VG
ffi.g
c, позволяет указать финализатор, в котором можно очистить память, классический пример:
local my_buffer = ffi.gc(ffi.C.malloc(4096), ffi.C.free)
AS
local function get_segment(req)
log.
info('get_segment %s', req.path)
return { status = 200,
headers = {
['content-type'] = 'video/mp2t',
},
body =
dvr.
get_segment(0)
}
end
server:route({ path = 's/:num', method = 'GET' },
get_segmentget_segment)
AS
AS
local my_buffer = ffi.gc(
my_pointer_from_C_func,
my_C_finalizer)
VG
AS
AS
VG
char *
, то вроде он его не десериализует, придется делать что-то типа: ffi.string(ffi.gc(dvr.get_segment(0), finalizer))
, но ffi.string сделает копирование 🙁AS
static int get_segment(struct lua_State *L)
{
LUA_INTEGER segment_num = lua_tointeger(L, 1);
say_info("get_segment_%d:[%d,%d]",segment_num);
static unsigned char userData[] = "hello";
lua_pushlightuserdata(L,&userData);
return 1;
}