2013-11-02 57 views
0

我想從Ruby FFI切換到Fiddle,它現在是Ruby std lib的一部分。如何處理ruby中的數組指針小提琴

雖然它很漂亮,但我很難弄清楚如何處理數組和指針。特別是,我怎麼能寫一個小提琴接口C函數是這樣的:

void my_func(double *, size_t len) 

映射成Ruby是相當簡單:

module Test 
    extend Fiddle::Importer 
    dlload './lib/libTest.dylib' 
    extern 'void my_func(double *, size_t)' 
end 

但後來我怎樣才能建立一個指向數組的指針,作爲第一個參數傳遞? 謝謝!

回答

0

你的意思是建立一個C數組和紅寶石這個數組的指針?

你可以嘗試這樣的:

free = Fiddle::Function.new(Fiddle::RUBY_FREE, [TYPE_VOIDP], TYPE_VOID) 
p = Pointer.malloc(SIZEOF_DOUBLE*len, free) 

,並呼籲像這樣:

my_func(p,len) 

紅寶石GC將調用free函數時,該內存塊將不會被使用。