ffi

lua
摘要由CSDN通过智能技术生成

FFI

介绍

FFI 库,是 LuaJIT 中最重要的一个扩展库。它允许从纯 Lua 代码调用外部C函数,使用 C 数据结构

在 JIT 编译过的代码中,调用 C 函数,可以被内连处理,不同于基于 Lua/C API 函数调用。 说明FFI库比正常的LUA/C API调用高效很多。

使用

doc

调用C函数
local ffi = require("ffi")
ffi.cdef[[
int printf(const char *fmt, ...);
]]
ffi.C.printf("Hello %s!", "world")
  • 加载 FFI 库。
  • 为函数增加一个函数声明。这个包含在 中括号 对之间的部分,是标准C语法。
  • 调用命名的 C 函数——非常简单。

使用标准C库的命名空间 ffi.C。通过符号名 (“printf”) 索引这个命名空间,自动绑定标准 C 库。索引结果是一个特殊类型的对象,当被调用时,执行 printf 函数。传递给这个函数的参数,从 Lua 对象自动转换为相应的 C 类型。

复杂调用

ffi接口返回的是cdata类型的数据结构或者单位,Lua不能直接打印。

lua中的local str在ffi中默认的是string,如果要传递给c的函数参数,两种方式
a. c函数中使用const char *
b.
local text = "text"
local c_str = ffi.new("char[?]", #text)
ffi.copy(c_str, text)
lib.drawText(fb, px, py, c_str, color)

加载so
local zlib = ffi.load(ffi.os == "Windows" 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值