如何在plt-scheme中通过ffi访问char **?

时间:2008-09-19 21:33:32

标签: mysql c lisp scheme

我正在用plt-scheme的ffi嘲笑我有一个返回char **(字符串数组)的C函数。如果我将我的函数声明为(_fun _pointer -> _pointer),如何将结果转换为方案中的字符串列表?

以下是相关的C声明:

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

3 个答案:

答案 0 :(得分:1)

认为你想要的是cvector:

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

_string / utf-8的cvector或你需要的任何编码似乎都是可以接受的。

但这是对文档的快速调查 - 我自己没有尝试过。请告诉我它是否有效!

答案 1 :(得分:0)

我知道这不是你想要的,但它可能会有所帮助。我已经完成了一些关于MySQL的基本Gambit Scheme FFI的工作。我不知道PLT Scheme和Gambit在FFI实施方面有何不同(我冒险“相当多”)但也许你可以从中得到一些东西:

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

答案 2 :(得分:0)

啊哈,我自己弄清楚了。

我必须使用mike链接到的页面中描述的_cpointer程序:

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

似乎someone already beat me为mysqlclient创建了一个ffi。不用担心;我的主要目标是了解ffi api,并且它正在向前发展。