python 双指针法_python ctypes,按引用传递双指针

问题

我正在尝试使用c库中的一个函数,其原型如下:

int glip_get_backends(const char ***name, size_t *count);

这里的name参数就是问题所在。它是一个通过引用传递的二维字符数组。在C中,函数使用如下:const char** name;

size_t count;

glip_get_backends(&name, &count);

for (size_t i = 0; i < count; i++) {

printf("- %s\n", name[i]);

}

现在我想从python使用ctypes来使用这个函数。

我试过的

对我来说,最合乎逻辑的方法是使用python:lglip = CDLL("libglip.so")

count = c_int(0)

backends = POINTER(POINTER(c_char))

lglip.glip_get_backends(byref(backends), byref(count))

导致错误信息TypeError: byref() argument must be a ctypes instance, not '_ctypes.PyCPointerType'

下一种方法是使用POINTER()函数三次,并省略byref(),但这会导致以下错误:ctypes.ArgumentError: argument 1: : Don't know how to convert parameter 1

然后我从this question中获得灵感,并得出以下结论:lglip = CDLL("libglip.so")

count = c_int(0)

backends = POINTER(POINTER(c_char))()

lglip.glip_get_backends(byref(backends), byref(count))

for i in range(0, count.value):

print backends[i]

由于某些原因,在backends的定义之后添加()已修复了该调用,但得到的输出是:< ctypes.LP_c_char object at 0x7f4592af8710 >

< ctypes.LP_c_char object at 0x7f4592af8710 >

在python中,我似乎无法使用一个iterator覆盖二维c数组,因为它没有正确地取消对它的引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值