2012-05-18 8 views
3

Я работаю с Framework C в MacRuby, которая имеет структуруКак создать C-указатель в MacRuby?

int CPhidget_getSerialNumber(CPhidgetHandle phid,int * serialNumber)  

Вы можете увидеть полную документацию here (если вы заинтересованы).

В MacRuby я попробовал следующее:

i = CPhidget_getSerialNumber(@encoder, nil) 

выше получает мне номер, но не серийный номер.

CPhidget_getSerialNumber(@encoder, i) 

Это заставляет меня ошибка с указанием: ожидаемый экземпляр указателя, получил `0' (Fixnum) (TypeError) (что меня не удивляет).

Итак, мой главный вопрос: есть ли эквивалент C-указателя в MacRuby?

+0

документация связывании, кажется, быть документацией для исходной библиотеки C. Как вы выполняете вызовы внешних функций? –

+0

У меня есть какао-каркас, основанный на C-API. Функции все одинаковы (по-видимому). Я создал файл поддержки моста для доступа к константам в файле заголовка, и он _seems_ должен работать. Вот руководство «Какао» (http://www.phidgets.com/documentation/Tutorials/Getting_Started_Cocoa.pdf) – tsugua

ответ

2

MacRuby имеет класс указателя, который может стоять для указателя C. Таким образом, вы могли бы сделать что-то вроде:

i = Pointer.new(:int) 
CPhidget_getSerialNumber(@encoder, i) 

Затем, чтобы извлечь результаты из указателя (т.е. разыменования его), вы используете синтаксис доступа к массиву в Ruby:

i[0] #=> value from CPhidget_getSerialNumber 
+0

Удивительно, спасибо за вашу помощь Джош. Я не мог найти ссылку на класс указателя в документах Ruby или документации Apple. Просто из любопытства вы знаете, где находятся документы? – tsugua

+0

Кажется, мы еще не документировали это (обычно вы могли бы прочитать документацию, используя 'macri'). Если вы хотите подать запрос на исправление ошибок, вы можете сделать это здесь: https://github.com/MacRuby/MacRuby/issues – Josh

+0

Привет, Джош, я напишу ошибку, но в итоге я нашел ссылку на указатель класса на вики-странице github: https://github.com/MacRuby/MacRuby/wiki/Pointer-Class – tsugua