2016-01-12 2 views
0

Я, по общему признанию, борюсь с C и C++, но я пытаюсь обернуть функцию C++ (extern to 'C') в FFI, но не совсем понимаю синтаксис.Обтекание функции C с FFI для Ruby

Форма externed кода C является:

Client *create_client(Address *address, const char * const foo){ 
//make stuff 
} 

Мой вопрос, в частности, в том, как обернуть, что в Ruby, используя FFI? Я думаю конструктор принимает два указателя, так что это будет иметь вид:

attach_function :create_client, [:pointer, :pointer], :pointer 

Но, с другой стороны, Const символ * Const Foo меня смущает - она ​​должна быть обработана в виде строки, как так:

attach_function :create_client, [:pointer, :string], :pointer 

Thanks.

ответ

1
attach_function :create_client, [:pointer, :string], :pointer 

const char * означает его кесарево струне const часть после того, как только имеет значение для функции вашей вызывающей. См. this для более подробной информации. Функция, которую вы завернули, выглядит правильно для меня, но я предполагаю, что вам нужно больше, чем эта функция, которая будет более сложной.

У FFI wiki есть некоторая хорошая информация here.

+0

1) Итак, «важная» часть для упаковки - все, что находится слева от звездочки? 2) Если есть двойные звездочки, то считается ли это указателем? – Ramrod

+0

Для упаковки важной части находится слева. И для вашего второго вопроса его еще указатель (его указатель указывает на указатель). – x64architecture

+0

Как только я получу все завернутое, я точно знаю, если это правильно - спасибо за вашу помощь! Теперь для меня разобраться, когда * является указателем или указывает на что-то еще (например, на строку)! – Ramrod

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