Python将char *作为参数传递给函数

时间:2016-01-07 15:15:46

标签: python c++ string cython

我使用Cython插件从C ++静态库创建了一个python模块。 C ++库提供了列出文件夹内容的功能。它提供了要显示其内容的目录的名称,以及将存储目录内容的输出缓冲区,当然还有输出缓冲区的长度。 该函数的C ++定义如下:

int ListItems(char *dir, char *buf, int buflen)

然后python模块又有一个函数PyListItems,它只是调用这个函数:

def PyListItems(char *dir, char *buf, int buflen):
    return ListItems(dir,buf,buflen)`

在我使用此函数的脚本中,我定义了一个字符串缓冲区和一个类型为c_char_p的指针,并将其传递给函数代替 buf参数:

buf = c_types.create_string_buffer(100)
pBuf = c_char_p(addressof(buf))
PyListItems('someFolder',pBuf,100)

但是我收到以下错误:

  

TypeError:期望的字符串或Unicode对象,找到c_char_p

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

pBuf = c_char_p(addressof(buf))

你不需要这个。 create_string_buffer已经返回一个字符数组。只是做:

buf = c_types.create_string_buffer(100)
PyListItems('someFolder',buf,100)