1

私は次のCコードを持っています:

typedef void (*mycallback) (char buf[128]);
void take_callback(mycallback cb)
{
}

同等のRubyFFI宣言を次のように記述しました(FFI wikiの構造体に関するアドバイスに従います)。

  callback :mycallback, [[:char, 128]], :void
  attach_function :take_callback, [:mycallback], :void

実行すると、次のエラーが発生します。

`find_type': unable to resolve type '[:char, 128]' (TypeError)

コールバックでchar配列を正しく宣言していないようです。:pointer配列がCの関数の引数で機能する方法から、私はの代わりに使用する必要があると思います[:char, 128]。しかし、FFIの特性についてはよくわかりません。ここで本当に正しい構文は何ですか?

4

1 に答える 1

2

配列はCでは値によって渡されません。配列は最初の要素へのポインターとして渡されるため、:pointer(または通常使用されるものは何でもchar *)正しいはずです。

于 2012-04-03T00:00:20.933 に答える