2012-01-19 44 views
3

我在C中嵌入了Ruby,我需要將C中創建的結構傳遞給Ruby腳本,我想在這裏使用struct值。我已經成功完成了這個結構聲明rb_struct_define和初始化rb_struct_new,但我無法傳遞一個C風格(struct Address {...})中定義的結構。將C初始化的結構傳遞給嵌入式Ruby解釋器

我得到了一些建議,這可以使用Data_Wrap_struct,但我無法得到它的工作。

我的示例代碼是在這裏:https://gist.github.com/1641269

回答

2

無論你傳遞給Ruby的方法必須是一個Ruby對象,你不能直接傳遞一個C結構的對象。

你可以做的是爲你的結構創建一個包裝對象,它將爲其成員提供Ruby代碼訪問權限。不幸的是,據我所知,沒有辦法根據結構的成員自動做到這一點。你必須編寫C代碼來定義合適的方法,如果你的結構有很多成員,這可能會有點乏味。

Data_Wrap_Struct宏是你用來包裝一個Ruby對象的C結構。然後,您可以在方法的實現中使用Data_Get_Struct來打開結構並獲取數據。

Here's an example這應該有希望指向正確的方向。

+0

非常感謝你,你的榜樣是完美的,絕對可以指向正確的方向。我一直在尋找這樣的幾個小時。 – matejuh