Pergunta

Eu estou zombando sobre com ffi de plt-scheme e eu tenho uma função C que retorna um char ** (matriz de strings). Se eu declaro a minha função como (_fun _pointer -> _pointer), como faço para converter o resultado para uma lista de strings no esquema?

Aqui estão os C-declarações relevantes:

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

Solução

I pensar que o que você quer é o CVector:

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

A CVector de _string / utf-8 ou qualquer codificação que você precisa parece reasanable.

Mas isso é de uma pesquisa rápida dos docs - Eu não tentei isso mesmo. Por favor, deixe-me saber se ele funciona!

Outras dicas

Eu sei que não é exatamente o que você está procurando, mas pode ajudar um pouco. Já fiz alguns trabalhos sobre a FFI básica Esquema Gambit para MySQL. Eu não sei como PLT Scheme e Gambit diferem em termos da sua aplicação FFI (Eu arriscaria com "um pouco"), mas talvez você pode obter algo fora dele:

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

Aha, eu descobri-lo eu mesmo.

Eu tenho que usar o procedimento _cpointer, descrito na página que Mike ligada a:

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

Parece também que alguém já me bater para a criação de um FFI para mysqlclient. Não se preocupe; Meu principal objetivo é compreender a api FFI, e vai para a frente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top