Я пытаюсь создать привязки для библиотеки C к Ruby через SWIG (2.0.3).
Скажем, у нас есть прототип функции в C, который гласит:
void do_sth_and_call_me_then( (int)(* my_callback)(GlyQuery *, GlyMemCache *))
Это сделает некоторые странные вещи и в конце концов вызовет обратный вызов:
int my_callback(GlyQuery * a, GlyMemCache * b)
указан как параметр несколько раз. Поскольку это обычный способ общения с библиотекой, я хочу иметь такое поведение и в Ruby. Во время исследования я обнаружил это , и это почти то, что мне нужно:
%{
void
wrap_callback(void *user_data, const char *other_data)
{
VALUE proc = (VALUE)user_data;
rb_funcall(proc, rb_intern("call"), 1, rb_str_new2(other_data));
}
%}
К сожалению, я не могу понять, что мне нужно изменить, чтобы это работало с объектами, отличными от строк.
Если вам нужна дополнительная информация: весь интерфейсный файл здесь
Любой совет?
Спасибо за любую помощь.