[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 から値を得られます。


ごとけん

In This Thread

Prev Next