メモ帳 Ruby全く知らないw
インストール
Ruby 64bit は何故かエラーが出て動かないので、32bit版で。DevKit もいれると GFortran が使える。
https://www.ruby-lang.org/ja/installation/#rubyinstaller
gem install ffi
で何とかなる。
Fortran
DLL を作る。デフォルトの呼び出し規約でいい模様。
gfortran --shared -o test.dll test.f90
subroutine test() bind(c, name = 'test') implicit none print *, 'test' return end subroutine test integer function aaa(i) bind(c, name = 'aaa') implicit none integer, value :: i aaa = i * i return end function aaa subroutine bbb(i) bind(c, name = 'bbb') implicit none integer, intent(IN OUT) :: i i = 9999 return end subroutine bbb !gfortran --shared -o test.dll test.f90
Ruby
require 'ffi' module FooLib extend FFI::Library ffi_lib "test.dll" attach_function :test, [], :void attach_function :aaa, [:int], :int attach_function :bbb, [:pointer], :void end p FooLib.test() p FooLib.aaa(10) n_ptr = FFI::MemoryPointer.new :int p FooLib.bbb(n_ptr) n = n_ptr.read_int p n
Fortran 関数の返り値が値で返されているのか番地で返されているのか不明だが、とりあえず値型でおk?