我真的可以在正确的方向上推动这一点。
鉴于此 C 代码:
typedef void cbfunc(void *data);
void set_callback(cbfunc* cb);
//do_stuff calls the callback multiple times with data as argument
void do_stuff(void *data);
这个红宝石代码:
module Lib
extend FFI::Library
# ...
callback :cbfunc, [:pointer], :void
attach_function :set_callback, [:cbfunc], :void
attach_function :do_stuff, [:pointer], :void
end
有什么方法可以将 ruby 数组作为回调数据传递,例如:
proc = Proc.new do |data|
# somehow cast FFI::Pointer to be a ruby array here?
data.push(5)
end
Lib::set_callback(proc)
Lib::do_stuff(ptr_to_a_ruby_obj_here)
问题是回调将被多次调用,我需要一种轻松构造各种 ruby 对象数组的方法。
也许我只是有点累,但感觉有一种简单的方法可以完成这项工作,而我只是没有看到。