[英]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.