【发布时间】:2012-01-27 07:37:53
【问题描述】:
我需要通过Python ctypes学习如何在下面的C++方法中处理char**。
使用create_string_buffer() 调用其他只需要单个指针的方法我做得很好,但是这个方法需要一个指向指针数组的指针。
ladybugConvertToMultipleBGRU32(
LadybugContext context,
const LadybugImage * pImage,
unsigned char** arpDestBuffers,
LadybugImageInfo * pImageInfo )
如何在 ctypes 中创建一个指向由六个 create_string_buffer(7963648) 缓冲区组成的数组的指针,以传递给此 C++ 方法进行写入?
arpDestBuffers = pointer to [create_string_buffer(7963648) for i in xrange(6)]
感谢您的帮助。
下面给出的两个答案都有效。我只是没有意识到我的代码中还有另一个问题,这使我无法立即看到结果。 第一个例子就像 Luc 写的那样:
SixBuffers = c_char_p * 6
arpDestBuffers = SixBuffers(
*[c_char_p(create_string_buffer(7963648).raw) for i in xrange(6)] )
来自 omu_negru 回答的第二个例子是:
arpDestBuffers = (POINTER(c_char) * 6)()
arpDestBuffers[:] = [create_string_buffer(7963648) for i in xrange(6)]
两者都被函数接受并被覆盖。在调用函数之前和之后键入 print repr(arpDestBuffers[4][:10]) 会给出:
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
'\x15\x10\x0e\xff\x15\x10\x0e\xff\x14\x0f'
这表明该函数成功地用数据覆盖了缓冲区。
【问题讨论】: