我需要学习如何通过Python ctypes处理下面的C++方法中的char**
。
调用其他只需要单指针的方法时,使用create_string_buffer()
方法调用良好,但是这种方法需要一个指向指针数组的指针。
ladybugConvertToMultipleBGRU32(
LadybugContext context,
const LadybugImage * pImage,
unsigned char** arpDestBuffers,
LadybugImageInfo * pImageInfo )
我该如何在ctypes中创建一个指向6个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提供的第二个例子是:
第二个例子来自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'
这表明该函数成功地使用数据覆盖了缓冲区。
SixBuffers = c_char_p * 6 arpDestBuffers = SixBuffers(*[c_char_p(create_string_buffer('\x00'*10).raw) for i in xrange(6)]) print type(arpDestBuffers), repr(arpDestBuffers) print type(arpDestBuffers[0]), repr(arpDestBuffers[0])
这段代码的输出如下:<class '__main__.c_char_p_Array_6'> <__main__.c_char_p_Array_6 object at 0x01CB9F80> <type 'str'> ''
- user6811ctypes.ArgumentError: argument 2: <type 'exceptions.TypeError'>: Don't know how to convert parameter 2
对于我尝试的大多数事情都是一样的。 - user6811