c - ffi/luajit 中的 void* 编码问题
问题描述
我以为我已经弄清楚了如何在 ffi 中为 luajit 编写 c 指针,例如以下根据需要工作的代码:
ffi.cdef("void XPLMGetWindowGeometry(XPLMWindowID inWindowID, int * outLeft, int * outTop, int * outRight, int * outBottom)") DONE
local wLeft = ffi.new("int[1]")
local wRight = ffi.new("int[1]")
local wTop = ffi.new("int[1]")
local wBottom = ffi.new("int[1]")
local winLeft, winTop, winRight, winBottom = 0,0,0,0
XPLM.XPLMGetWindowGeometry(xplm_wnd, wLeft, wTop, wRight, wBottom)
winLeft, winTop, winRight, winBottom = wLeft[0], wTop[0], wRight[0], wBottom[0]
但是,我完全不知道如何定义一个 void*,例如下面的 void* inRefcon,到目前为止,我尝试过的一切都失败了。
代码是:
ffi.cdef("void * XPLMSetWindowRefCon(XPLMWindowID inWindowID, void * inRefcon)")
-- define pointer in ffi - see below --
XPLM.XPLMSetWindowRefCon(xplm_wnd, cdata)
我以为我可以编写一个 int* 并通过它,但显然不是!尝试了以下所有变体:
local refcon = ffi.new("int[1]")
local refconp = ffi.new("char[1024]", "hello")
local refcon = refconp[0]
local refcon = ffi.typeof("$ *", hello)
local refcon = ffi.typeof("int* [?]")
local refcon = ffi.new("int[1]")
local refcon = ffi.cast("void *", 12)
refcon[0] = 12
local refcon = ffi.new("char [1024]", "foobar")
local refconp = ffi.new("int *")
local refcon = refconp
local refcon = ffi.new("int[10]", 12)
我要么收到错误参数 #2 到“XPLMSetWindowRefCon”(无法将“int”转换为“void *”)之类的错误,要么收到 CTD。
在 ffi/luajit 中声明 void* 变量的技巧是什么?
伊恩
解决方案
推荐阅读
- python - 在 AWS-Lambda(Python) 中,如何在标头中调用需要令牌授权的外部 API
- php - Laravel 同步一个 3 模型数据透视表
- java - 为什么我的线程在捕获异常时不创建一个新线程?
- javascript - 切换一次更改 2 个 DIV 宽度 + localStorage
- javascript - 将 AJAX 短轮询转换为长轮询
- javascript - 当用户上传新视频时,youtube api v3 会做一些事情
- javascript - Sapper预加载功能中的要求
- git - 远程关闭heroku和github连接错误
- python - 正则表达式和 Python glob
- excel - 如何计算 Microsoft Excel 中的目标年数