2

Ruby FFI から、現在 Ruby std lib の一部となっている Fiddle に切り替えようとしています。

ただし、これはかなり文書化されておらず、配列とポインターを処理する方法を理解するのに苦労しています。特に、次のように C 関数への Fiddle インターフェイスをどのように記述できますか。

void my_func(double *, size_t len)

それをRubyにマッピングするのはとても簡単です:

module Test
  extend Fiddle::Importer
  dlload './lib/libTest.dylib'
  extern 'void my_func(double *, size_t)'
end

しかし、最初の引数として渡される配列へのポインターを作成するにはどうすればよいでしょうか? ありがとう!

4

1 に答える 1

2

C配列とこの配列のポインターをRubyで構築するということですか?

次のように試すことができます:

free = Fiddle::Function.new(Fiddle::RUBY_FREE, [TYPE_VOIDP], TYPE_VOID)
p = Pointer.malloc(SIZEOF_DOUBLE*len, free)

次のように呼び出します。

my_func(p,len)

ruby GC は、このメモリ ブロックが使用されない場合に free 関数を呼び出します。

于 2014-05-14T07:06:56.503 に答える