FFIにてRuby引数をC引数に変換してみる

ODEのdsSimulationLoopの引数に渡すため、文字列のArrayをC引数として扱うためには変換が必要です。
色々試して、とりあえず以下の方法なら渡せそうなのでメモします。

require 'ffi'

@args = [$0, "-notex"]

@argv = FFI::MemoryPointer.new :pointer, @args.size
array = []
@args.each do |arg|
  str = FFI::MemoryPointer.new :string, arg.size
  str.write_string arg
  array << str
end

@argc = @args.size
@argv.write_array_of_pointer array