Как мне получить доступ к char ** через ffi в plt-схеме? - PullRequest
2 голосов
/ 20 сентября 2008

Я шучу над ffi plt-схемы и у меня есть C-функция, которая возвращает символ ** (массив строк). Если я объявлю свою функцию как (_fun _pointer -> _pointer), как мне преобразовать результат в список строк в схеме?

Вот соответствующие C-декларации:

typedef char **MYSQL_ROW;   /* return data as array of strings */
// ...
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

Ответы [ 3 ]

1 голос
/ 20 сентября 2008

Я думаю , что вы хотите, это cvector:

http://docs.plt -scheme.org / иностранные / Derived_Utilities.html # (part._foreign ~ 3acvector)

Cvector из _string / utf-8 или любой другой нужной вам кодировки кажется пригодным для использования.

Но это из краткого обзора документов - я сам не пробовал. Пожалуйста, дайте мне знать, если это работает!

0 голосов
/ 20 сентября 2008

Ага, сам разобрался.

Я должен использовать процедуру _cpointer, описанную на странице, с которой Майк связан:

(_fun _pointer -> (_cpointer/null 'mysql-row (make-ctype _pointer #f #f)))

Также кажется, что кто-то уже избил меня за создание ffi для mysqlclient. Не беспокоиться; Моя главная цель - понять API-интерфейсы FIFI, и это продвигается вперед.

0 голосов
/ 20 сентября 2008

Я знаю, что это не совсем то, что вы ищете, но это может немного помочь. Я проделал некоторую работу над базовой FFI Gambit Scheme для MySQL. Я не знаю, чем отличаются PLT Scheme и Gambit с точки зрения их реализации FFI (я бы рискнул «совсем немного»), но, может быть, вы можете получить что-то из этого:

http://bunny.jonnay.net/zengarden/trunk/lib/mysql/mysql-ffi.scm

...