为了账号安全,请及时绑定邮箱和手机立即绑定

ctypes:将char的指针分解/转换为char的指针数组

ctypes:将char的指针分解/转换为char的指针数组

郎朗坤 2021-04-02 11:11:28
我正在使用C ++中的示例代码来处理封闭源共享库,如下所示:// Header#define MAX_PARAM_NAME             10int foo(..., char **ParNameList, ...);// Mainchar      *ParNameList = (char *)NULL;ret = foo(..., &ParNameList,...);par = (char (*)[MAX_PARAM_NAME])ParNameList;应该如何在ctypes中处理它?有问题的部分是在函数声明中应该使用foo(..., char **ParNameList, ...);a char **,但char *实际上是在函数调用中给出了对它的引用。到目前为止,我有:from ctypes import *so = cdll.LoadLibrary(...)  so.foo.argtypes = [                                                                  ...POINTER(POINTER(c_char)), # ParNameList                       ...]                                                                                                        so.foo.restype = c_int                                                               #...ParNameList = POINTER(c_char)()so.foo(..., ParNameList ,...)这给了我一个垃圾字符串,我在其中看到所需的输出与随机变化的RAM位交错。但是(char (*)[MAX_PARAM_NAME])强制转换在ctypes中如何工作?如果整个事情有更直接的方法,我将不胜感激。
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

您需要使用传递c_char指针的地址byref:


foo.argtypes = [..., POINTER(POINTER(c_char)), ...]

foo.restype = c_int


par_name_list = POINTER(c_char)()


# pass by reference

foo(byref(par_name_list))


par = cast(par_name_list, POINTER(c_char * MAX_PARAM_NAME))

之后,您可能需要释放内存。


查看完整回答
反对 回复 2021-04-13
  • 2 回答
  • 0 关注
  • 268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号