Como faço para acessar um char ** através ffi em plt-scheme?
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);
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.