2011-03-20 8 views
4

ライブラリ自体から構造体を返す関数をいくつか読み込む必要があります。RubyFFIで関数の戻り値として構造体を指定するにはどうすればよいですか?

attach_function 'fn_name', [], # ... What do I put here? 

RubyFFIのWikiページは古いと思われるので、ここで少し失われています。

FFI::Structを作成するにはどうすればいいですか?それをネイティブ関数の戻り値の型としてどのように指定するのですか?

答えて

8
class SOME_STRUCT < FFI::Struct 
    layout :a, :float, 
      :b, :float 
end 

、その後

attach_function 'fn_name', [], SOME_STRUCT 

、それがスタックに割り当てられた場合、構造体:FFI-1.0(およびJRubyののとおり

attach_function 'fn_name', [], SOME_STRUCT.by_value 
+4

typedef struct { float a, b; } SOME_STRUCT; 

あなたはこれを使用する必要があります1.6.0)、関数が構造体への参照を返す場合は、SOME_STRUCT.by_refを戻り型として使用します - 単にSOME_STRUCTを使用すると、SOME_STRUCTのインスタンスの代わりにFFI :: Pointerが返されます。また、SOME_STRUCT.ptr、SOME_STRUCT.valの略語を使用することもできます。 –

関連する問題