Объявление массива символов в Ruby FFI - PullRequest
1 голос
/ 03 апреля 2012

У меня есть следующий код C:

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

Я написал эквивалентные декларации Ruby 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.Какой действительно правильный синтаксис здесь?

1 Ответ

2 голосов
/ 03 апреля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...