4
我必須加載幾個從庫本身返回結構的函數。如何在RubyFFI中指定一個結構作爲函數的返回值?
attach_function 'fn_name', [], # ... What do I put here?
RubyFFI的Wiki頁面似乎已經過時了,所以我在這裏有點迷路了。
如何創建FFI::Struct
,以及如何將其指定爲本機函數的返回類型?
我必須加載幾個從庫本身返回結構的函數。如何在RubyFFI中指定一個結構作爲函數的返回值?
attach_function 'fn_name', [], # ... What do I put here?
RubyFFI的Wiki頁面似乎已經過時了,所以我在這裏有點迷路了。
如何創建FFI::Struct
,以及如何將其指定爲本機函數的返回類型?
class SOME_STRUCT < FFI::Struct
layout :a, :float,
:b, :float
end
然後
attach_function 'fn_name', [], SOME_STRUCT
,如果棧上分配結構:
typedef struct
{
float a, b;
} SOME_STRUCT;
你應該使用這樣的:
attach_function 'fn_name', [], SOME_STRUCT.by_value
作爲FFI-1.0(和JRuby的1.6.0),如果函數返回對結構的引用,則使用SOME_STRUCT.by_ref作爲返回類型 - 當你只使用SOME_STRUCT時,你會取回一個FFI :: Pointer而不是SOME_STRUCT的一個實例。您也可以使用SOME_STRUCT.ptr和SOME_STRUCT.val這兩種簡寫形式 - 無論哪一種都漂浮在您的船上。 – 2011-03-23 04:09:09