0

Simple case, something like printf(str, [arg1, arg2, ...])

How would I write a ruby 'attach_function' call using FFI to utilize such a function?

I'm surprised that I can't find this question answered through my googling, but perhaps I'm using the wrong terminology.

-- update -- Perhaps I was not clear enough. I am already in the middle of writing a RubyGem that interfaces with a C library. Its working just fine already. I'm using FFI and was going along just fine until I hit this function with a variable argument list.

4

1 に答える 1

2

ruby で C 関数を使用する標準的な方法は、そのための gem を作成して ruby​​ を拡張することです。Haskell のような単純な方法はありません。

しかし、Ruby 用の C gem を作成するのはかなり簡単な作業であり、Haskell で FFI を使用するのと同じくらい簡単です。シンプルな C gem の作成方法を説明しているruby​​ pickaxe の無料の章を見ることができます。

編集

問題が varargs と ffi にある場合は、 を使用していると仮定して、ドキュメンテーション の例をffi gem参照できます。この例では、その方法を示しています。

require 'ffi'

module Hello
  extend FFI::Library
  attach_function 'printf', [:string, :varargs], :int
end

3.times {  Hello.printf("cputs %s %d %x", :string, "yoyo", :int, 33, :int, 34)} # each one needs its own specifier of which type it is

これを試してもうまくいかない場合は、コードを見て何が問題だったのか教えてください

于 2013-09-06T23:02:49.453 に答える