Question

Je me moque de la fonction ffi de plt-scheme et j'ai une fonction C qui renvoie un caractère ** (tableau de chaînes). Si je déclare ma fonction en tant que (_ fun _pointer - > _pointer) , comment convertir le résultat en une liste de chaînes dans le schéma?

Voici les déclarations C pertinentes:

typedef char **MYSQL_ROW;   /* return data as array of strings */
// ...
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
Était-ce utile?

La solution

Je pense que ce que vous voulez, c'est le cvector:

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

Un lecteur de _string / utf-8 ou de tout codage dont vous avez besoin semble raisonnable.

Mais cela provient d’un rapide aperçu de la documentation - je n’ai pas essayé cela moi-même. S'il vous plaît laissez-moi savoir si cela fonctionne!

Autres conseils

Je sais que ce n’est pas exactement ce que vous recherchez, mais cela pourrait aider un peu. J'ai travaillé sur un schéma de base Gambit FFI pour MySQL. Je ne sais pas en quoi PLT Scheme et Gambit diffèrent en termes de mise en œuvre FFI (je m'aventurerais avec "pas mal") mais vous pouvez peut-être en tirer quelque chose:

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

Aha, je l'ai compris moi-même.

Je dois utiliser la procédure _cpointer , décrite à la page à laquelle le lien vers:

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

Il semble également que quelqu'un m'a déjà battu pour créer un fichier ffi mysqlclient. Ne pas s'inquiéter; Mon objectif principal est de comprendre l’API FFI, et nous allons de l’avant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top