【问题标题】:Passing pointer to int in LUA FFI在 LUA FFI 中传递指向 int 的指针
【发布时间】:2014-01-23 02:49:31
【问题描述】:

我有一个C函数如下

ffi.cdef[[

typedef struct {
    int index;
    char name[10];
} entry_key_t;

extern entry_t *lookup_entry(entry_key_t *key, int *err);

]]

我在传递“int *”时遇到问题,我尝试了以下变体,

本地 err_val = ffi.new("int[1]") 本地 err_val = ffi.new("int *")

程序崩溃,因为传递给函数的“err”为 NULL。 (请注意,我可以在执行 ffi.new("entry_key_t[1]") 后传递指针'key')

我错过了什么?我正在使用 LuaJIT 2.0.2。

【问题讨论】:

  • local err_Val=ffi.new("int[1]") 应该可以工作。也许你做错了什么,例如在将指针传递给函数时取消引用它?请注意,没有初始化程序的 ffi.new 会将指针初始化为 0。请在调用 lookup_entry 时将代码发布到该点
  • 对不起,这是我代码中的一个愚蠢的错字。是的,本地 err_Val=ffi.new("int[1]") 和 intPtr() (根据亚历克斯的回答)有效。抱歉打扰了。

标签: ffi luajit


【解决方案1】:

不确定这是否适合您,但我用于输出参数的模式是:

local intPtr = ffi.typeof"int[1]"

local key = ffi.new("entry_key_t[1]")
local err = intPtr()

lookup_entry(key,err)

print(err[0])

【讨论】:

  • 谢谢,它成功了。但问题是代码中的一个愚蠢的错字,我想我喝醉了 ;-)
猜你喜欢
  • 1970-01-01
  • 2015-06-23
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 2015-09-10
  • 1970-01-01
  • 2013-12-06
相关资源
最近更新 更多