Luajit-FFI实战(C/C++)
2020.5.26 - 人鱼情未了
Luajit 演示版下载(点击查看教程):luajit-Demo.rar
windows API目录
luaffi.C API无需调用任何dll文件,luaffi可以使用Sleep,printf等C语言函数,说明里面声明了#include
思考:既然win系统下的luajit自带win功能的API,那么我猜测,在安卓系统下它可能也是兼容了它的内部函数,有待研究。
C++扩展dll:我们后续会使用ffi.load来调用C++编译的dll动态库,加载#include
1 / 鼠标 API示例
获取鼠标当前坐标 GetCursorPos
-- 调用FFI模块
local ffi = require("ffi")
-- 声明方法:需要用哪个函数,就把它写进ffi.cdef([[声明.h]])
ffi.cdef([[
//声明结构体,类型取名:tagPOINT,变量取名:POINT
typedef struct tagPOINT
{
long x;
long y;
}POINT;
//声明函数:没有返回值,形参:指针类型的tagPOINT结构体
void GetCursorPos(struct tagPOINT*);
]])
-- 通过变量POINT新建tagPOINT结构体,取名mouse
local mouse = ffi.new("POINT")
-- mouse转指针类型,p代表指针类型
local mouse_p = ffi.cast('struct tagPOINT*', mouse)
-- 调用windows函数获取鼠标当前坐标
ffi.C.GetCursorPos(mouse_p)
-- 打印当前鼠标位置坐标
print(mouse.x, mouse.y)
**C++原型**
#include <windows.h>
#include <iostream>
int main() {
POINT mouse; //定义结构体POINT(windows.h自带结构体)
GetCursorPos(&mouse); //放入指针从函数里取值
std::cout << mouse.x << "," << mouse.y << std::endl; //打印数据
return 0;
}