Предаване на C-инициализирана структура към вграден интерпретатор на Ruby

Вграждам Ruby в C и трябва да предам структура, създадена в C, към Ruby скрипт, където искам да работя със стойности на структура. Успешно направих това с декларация на структура rb_struct_define и инициализация rb_struct_new, но не мога да предам структура, която е дефинирана в стил C (struct Address {...}).

Получих съвет, че това може да се направи с помощта на Data_Wrap_struct, но не мога да го накарам да работи.

Моят примерен код е тук: https://gist.github.com/1641269


person matejuh    schedule 19.01.2012    source източник


Отговори (1)


Каквото и да подадете към Ruby метод, трябва да бъде Ruby обект, не можете директно да предадете C struct обект.

Това, което можете да направите, е да създадете обвиващ обект за вашата структура, който ще осигури достъп до Ruby код на своите членове. За съжаление, доколкото ми е известно, няма начин това да се направи автоматично въз основа на членовете на структурата. Ще трябва да напишете C кода, за да дефинирате подходящите методи, което може да стане малко досадно, ако вашата структура има много членове.

Макросът Data_Wrap_Struct е това, което използвате, за да обвиете C структурата в Ruby обект. След това можете да използвате Data_Get_Struct в реализациите на методите, за да разопаковате структурата и да получите данните.

Ето пример, който се надяваме да ви насочи в правилната посока.

person matt    schedule 19.01.2012
comment
Благодаря ви много, примерът ви е перфектен и определено ме насочва в правилната посока. Търсих нещо подобно с часове. - person matejuh; 20.01.2012