我使用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
非常感谢任何帮助。
答案 0 :(得分:2)
pBuf = c_char_p(addressof(buf))
你不需要这个。 create_string_buffer
已经返回一个字符数组。只是做:
buf = c_types.create_string_buffer(100)
PyListItems('someFolder',buf,100)