2014-06-27 48 views
1

我有一個C中的結構靜態數組,我想在Ruby中讀取。如何使用紅寶石FFI讀取靜態結構數組

C數據結構是這樣的:

​​

我怎樣才能讀取來自紅寶石使用FFI和attach_variable的myData的數組?

我有這樣的Ruby代碼:

module MyLib 

    class MyStruct < FFI:Struct 
    layout :name, :string, 
      :val, :int 
    end 

    attach_variable :myData, :myData, :pointer 


    def self.readDataArray 
    pointer = myData 
    ??? how to use this with MyStruct to iterate through the array ??? 
    end 
end 

回答

1

有沒有特別好的辦法,我害怕。 read_array_of_type不適用於結構。

你可以做到這一點用簡單的指針算術:

def self.readDataArray 
    pointer = myData 
    array_of_structs = 3.times.map { |idx| 
     MyStruct.new(pointer + idx * MyStruct.size) 
    } 
    # Do your business 
end