Как мне получить доступ к символу ** через ffi в plt-схеме?
Вопрос
Я издеваюсь над ffi от plt-scheme, и у меня есть C-функция, которая возвращает char ** (массив строк).Если я объявлю свою функцию как (_fun _pointer -> _pointer)
, как мне преобразовать результат в список строк в scheme?
Вот соответствующие C-декларации:
typedef char **MYSQL_ROW; /* return data as array of strings */
// ...
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
Решение
Я подумай то, что вам нужно, - это cvector:
http://docs.plt-scheme.org/foreign/Derived_Utilities.html #(часть._foreign~3acvector)
cvector из _string / utf-8 или любой другой кодировки, которая вам нужна, кажется разумным.
Но это из краткого обзора документов - сам я такого не пробовал.Пожалуйста, дайте мне знать, если это сработает!
Другие советы
Я знаю, что это не совсем то, что вы ищете, но это может немного помочь.Я проделал некоторую работу над базовой схемой Gambit FFI для MySQL.Я не знаю, чем PLT Scheme и Gambit отличаются с точки зрения их реализации FFI (я бы рискнул сказать "совсем немного"), но, возможно, вы сможете что-то из этого извлечь:
http://bunny .jonnay.net/zengarden/trunk/lib/mysql/mysql-ffi.scm
Ага, я сам до этого додумался.
Я должен использовать _cpointer
процедура, описанная на странице, на которую ссылается майк:
(_fun _pointer -> (_cpointer/null 'mysql-row (make-ctype _pointer #f #f)))
Также кажется, что кто-то уже избил меня для создания ffi в mysqlclient.Не стоит беспокоиться;Моя главная цель - понять api ffi, и это продвигается вперед.