私は実際にこれに正しい方向にプッシュを使用することができます。ルビーオブジェクトポインタをruby-ffiコールバックに渡すことはできますか?
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);
このRubyコード:このCのコードが与えられ
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)
:
module Lib
extend FFI::Library
# ...
callback :cbfunc, [:pointer], :void
attach_function :set_callback, [:cbfunc], :void
attach_function :do_stuff, [:pointer], :void
end
は、私は、コールバックデータとしてのようなものをRubyの配列を渡すことができます任意の方法はあります
問題は、コールバックが複数回呼び出されることです。配列を簡単に構築する方法が必要ですさまざまなルビオブジェクトの
多分私は少し疲れているかもしれませんが、これを行うための簡単な方法があるように感じ、私はそれを見ていません。
C、Rubyのいずれの側で配列作成をしたいですか? – tadman
@tadman Ruby側です。私はちょうど私がprocをカレーすることができることを理解した、私はなぜ前にそれを考えなかったのか分からない。 –
あなたはそれをはっきりと説明したからです。 [厚紙プログラマー](https://en.wikipedia.org/wiki/Rubber_duck_debugging)になると嬉しいです。あなたがそれを働かせることができれば、自己回答の質問は同じジャムの他の人を助けるでしょう。 – tadman