2012-04-02 1 views
1

Я следующий код C:Объявив массив символов в Ruby, FFI

typedef void (*mycallback) (char buf[128]); 
void take_callback(mycallback cb) 
{ 
} 

Я написал эквивалентные объявления рубин FFI, как показано ниже (следующие рекомендации по FFI wiki структур):

callback :mycallback, [[:char, 128]], :void 
    attach_function :take_callback, [:mycallback], :void 

Когда я запускаю его, возникает следующая ошибка:

`find_type': unable to resolve type '[:char, 128]' (TypeError) 

Кажется, я не объявляю массив символов в обратный вызов правильно. Из того, как массивы работают в аргументах функции в C, я думаю, что я должен использовать :pointer вместо [:char, 128]. Но я не уверен в особенности FFI. Какой здесь действительно правильный синтаксис?

ответ

2

Массивы не передаются по значению в C - они передаются как указатели на первый элемент, поэтому :pointer (или то, что обычно используется для char *) должно быть правильным.

+0

Я только что нашел эту страницу вики: https://github.com/ffi/ffi/wiki/Callbacks, которая подтверждает, что я должен использовать: указатель. –

 Смежные вопросы

  • Нет связанных вопросов^_^