Come posso accedere a un carattere ** tramite ffi in plt-schema?
Domanda
Sto scherzando con il ffi di plt-schema e ho una funzione C che restituisce un carattere ** (array di stringhe). Se dichiaro la mia funzione come (_fun _pointer - > _pointer)
, come posso convertire il risultato in un elenco di stringhe nello schema?
Ecco le dichiarazioni C pertinenti:
typedef char **MYSQL_ROW; /* return data as array of strings */
// ...
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
Soluzione
Penso che quello che vuoi sia il cvector:
http: //docs.plt-scheme .org / estero / Derived_Utilities.html # (part._foreign ~ 3acvector)
Un cvector di _string / utf-8 o di qualsiasi codifica di cui abbiate bisogno sembra fattibile.
Ma proviene da una rapida rassegna dei documenti: non ho provato questo da solo. Per favore fatemi sapere se funziona!
Altri suggerimenti
So che non è esattamente quello che stai cercando, ma potrebbe aiutare un po '. Ho lavorato su un FFI Schema Gambit di base per MySQL. Non so in che modo PLT Scheme e Gambit differiscono in termini di implementazione FFI (mi avventurerei con "abbastanza"), ma forse puoi ricavarne qualcosa:
http://bunny.jonnay.net/zengarden /trunk/lib/mysql/mysql-ffi.scm
Ah, l'ho capito da solo.
Devo usare la procedura _cpointer
, descritta nella pagina a cui il microfono è collegato:
(_fun _pointer -> (_cpointer/null 'mysql-row (make-ctype _pointer #f #f)))
Sembra anche che qualcuno mi abbia già battuto per creare un ffi per mysqlclient. Da non preoccuparsi; Il mio obiettivo principale è capire l'fi ffi e andrà avanti.