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);
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top