Pregunta

Me estoy burlando del ffi de plt-scheme y tengo una función C que devuelve un carácter ** (matriz de cadenas).Si declaro mi función como (_fun _pointer -> _pointer), ¿cómo convierto el resultado en una lista de cadenas en el esquema?

Aquí están las declaraciones C relevantes:

typedef char **MYSQL_ROW;   /* return data as array of strings */
// ...
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
¿Fue útil?

Solución

I pensar que lo que quieres es el cvector:

http://docs.plt-scheme.org/foreign/Derived_Utilities.html#(part._foreign~3acvector)

Un cvector de _string/utf-8 o cualquier codificación que necesite parece razonable.

Pero eso es de una revisión rápida de los documentos; yo no lo he probado yo mismo.¡Por favor, déjeme saber si funciona!

Otros consejos

Sé que no es exactamente lo que estás buscando, pero puede que te ayude un poco.He trabajado un poco en un FFI básico de Gambit Scheme para MySQL.No sé en qué se diferencian PLT Scheme y Gambit en términos de su implementación de FFI (me aventuraría con "bastante") pero tal vez puedas sacar algo de eso:

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

Ajá, lo descubrí yo mismo.

tengo que usar el _cpointer procedimiento, descrito en la página a la que mike vinculó:

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

También parece que alguien ya me ganó para crear un ffi para mysqlclient.No es para preocuparse;Mi objetivo principal es comprender la API de ffi y seguir adelante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top