我已经使用luajit ffi库来包装一个C库,其中包含一个在ppm文件上绘制文本的函数:
void drawText(frameBuffer *fb, int px, int py, char* text, pixel color)
Run Code Online (Sandbox Code Playgroud)
当我尝试使用字符串从lua调用它时,我收到此错误bad argument #4 to 'drawText' (cannot convert 'string' to 'char *').它看起来不像lua字符串库有任何东西可以将整个字符串转换为字节数组或任何我可以充分操作的东西.
有关如何在没有修改C代码的情况下在lua端执行此操作的任何提示?
或者,重写您的C函数以接受const char*而不是a char*.然后你可以直接使用LuaJIT字符串,而不需要先为它们分配缓冲区.
这意味着该函数不能修改传递的字符串,但通常在大多数函数中都不会这样做.如果您希望传入字符串文字(因为它们属于类型const char*),以及其他良好的API设计,那么在较新版本的C中也需要它.
转换记录在从Lua对象转换为FFI语义页面的C类型中.
您不能将Lua 字符串传递给直接需要char*的ffi函数.您需要先将Lua 字符串转换为char*.为此,使用和之后创建一个新的C 字符串变量ffi.new,将Lua 字符串变量的内容复制到此新的C 字符串变量.例如:
local text = "text"
local c_str = ffi.new("char[?]", #text)
ffi.copy(c_str, text)
lib.drawText(fb, px, py, c_str, color)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3309 次 |
| 最近记录: |