Что бы вы ни передавали методу Ruby, он должен быть объектом Ruby, вы не можете напрямую передать объект структуры C.
Что вы можете сделать, это создать объект-обертку для вашей структуры, который обеспечит доступ кода Ruby своим членам. К сожалению, насколько я знаю, нет способа автоматически сделать это на основе членов структуры. Вам придется написать код на C, чтобы определить соответствующие методы, что может быть немного утомительно, если в вашей структуре много членов.
Макрос Data_Wrap_Struct
- это то, что вы используете, чтобы обернуть структуру C в объект Ruby. Затем вы можете использовать Data_Get_Struct
в реализациях методов, чтобы развернуть структуру и получить данные.
Вот пример , который, мы надеемся, должен указать вам правильное направление.