繁体   English   中英

如何创建指向指针数组的 Python ctypes 指针

[英]How do I create a Python ctypes pointer to an array of pointers

我需要通过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'

这表明该函数成功地用数据覆盖了缓冲区。

也许像

SixBuffers = c_char_p * 6
arpDestBuffers = SixBuffers(*[c_char_p(create_string_buffer(7963648).raw) for i in xrange(6)])

没有自己尝试,所以不确定它是否有效。 灵感来自http://python.net/crew/theller/ctypes/tutorial.html#arrays

通过调用 create_string_buffer 创建您需要的所有 string_buffers 后,您可以使用以下命令为它们创建一个数组:

var=(POINTER(c_char)*size)()  /* pointer_to_pointer */

然后你可以通过用var[index]对其进行索引来填充它,最后只用它作为参数调用你的函数......对我来说很好用,我只是在一个签名为void test_fn(char*,char**,unsigned char); 用 C 写的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM