[ruby-list:50751] Re: C言語によるRubyの拡張ライブラリの作成について
From:
Kentaro Goto <gotoken@...>
Date:
2019-04-27 04:27:30 UTC
List:
ruby-list #50751
2019年4月26日(金) 11:56 成田恭一 <ntnarita_prn@net-do.jp>:
> void hoge(double x[],double y[],double z[],double w[])
> という4つの配列を引数にとる関数があり、x,y,z,wをRubyの方で使いたい
> と考えております。
./libhoge.so にある hoge を呼ぶだけなら、fiddle を使うのがよさそうです。
https://docs.ruby-lang.org/ja/latest/library/fiddle.html
たとえば
require 'fiddle/import'
module LibHoge
extend Fiddle::Importer
dlload './libhoge.so'
extern 'void hoge(double x[], double y[], double z[], double w[]);'
end
def hoge(x, y, z, w)
buf = w.pack("d*")
LibHoge.hoge(x.pack("d*"), y.pack("d*"), z.pack("d*"), buf)
w.replace(buf.unpack("d*"))
end
とすれば Ruby の数値の配列 x, y, z, w に対して
Ruby のメソッド hoge(x, y, z, w) を呼べて w から値を得られます。
ごとけん