Как мне получить доступ к символу ** через ffi в plt-схеме?

StackOverflow https://stackoverflow.com/questions/105816

  •  01-07-2019
  •  | 
  •  

Вопрос

Я издеваюсь над 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, и это продвигается вперед.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top