2

我在嘲笑 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);
4

3 回答 3

1

认为你想要的是cvector:

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

_string/utf-8 的 cvector 或您需要的任何编码似乎都是合理的。

但这是对文档的快速调查——我自己没有尝试过。请让我知道它是否有效!

于 2008-09-19T21:57:44.483 回答
0

我知道这不是您正在寻找的东西,但它可能会有所帮助。我在 MySQL 的基本 Gambit Scheme FFI 上做了一些工作。我不知道 PLT Scheme 和 Gambit 在 FFI 实现方面有何不同(我敢说“相当”),但也许你可以从中得到一些东西:

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

于 2008-09-19T21:50:58.477 回答
0

啊哈,我自己想通了。

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

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

似乎有人已经打败了我为 mysqlclient 创建 ffi。不用担心; 我的主要目标是了解 ffi api,并且它正在向前发展。

于 2008-09-19T22:26:55.380 回答