如何创建指向指针数组的Python ctypes指针 我需要学习如何通过Python cType在C++方法中处理 char *>代码。 我使用create\u string\u buffer()调用其他只需要单个指针的方法做得很好,但是这个方法需要指向指针数组的指针 ladybugConvertToMultipleBGRU32( LadybugContext context, const LadybugImage * pImage, unsigned char** arpDestBuffers, LadybugImageInfo * pImageInfo ) 如何创建指向六个代码的数组指针?CytAyStRIGIGIGULD缓冲区(7963648)< /Cuff>缓冲区,以传递给C++的编写方法?< /P> arpDestBuffers = pointer to [create_string_buffer(7963648) for i in xrange(6)]

如何创建指向指针数组的Python ctypes指针 我需要学习如何通过Python cType在C++方法中处理 char *>代码。 我使用create\u string\u buffer()调用其他只需要单个指针的方法做得很好,但是这个方法需要指向指针数组的指针 ladybugConvertToMultipleBGRU32( LadybugContext context, const LadybugImage * pImage, unsigned char** arpDestBuffers, LadybugImageInfo * pImageInfo ) 如何创建指向六个代码的数组指针?CytAyStRIGIGIGULD缓冲区(7963648)< /Cuff>缓冲区,以传递给C++的编写方法?< /P> arpDestBuffers = pointer to [create_string_buffer(7963648) for i in xrange(6)],python,pointers,ctypes,Python,Pointers,Ctypes,谢谢你的帮助 下面给出的两个答案都有效。我只是没有意识到我的代码中还有另一个问题,这使我无法立即看到结果。 第一个例子正如Luc所写: SixBuffers = c_char_p * 6 arpDestBuffers = SixBuffers( *[c_char_p(create_string_buffer(7963648).raw) for i in xrange(6)] ) omu_Negrou回答的第二个例子是: arpDestBuffers = (POINTE

谢谢你的帮助


下面给出的两个答案都有效。我只是没有意识到我的代码中还有另一个问题,这使我无法立即看到结果。 第一个例子正如Luc所写:

SixBuffers = c_char_p * 6
arpDestBuffers = SixBuffers(
            *[c_char_p(create_string_buffer(7963648).raw) for i in xrange(6)] )
omu_Negrou回答的第二个例子是:

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)])

我自己没有试过,所以不确定它是否有效。灵感来源于

通过调用create\u string\u buffer创建所需的所有字符串\u缓冲区后,您可以使用以下命令为它们创建数组:

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

然后,您可以通过使用
var[index]
对它进行索引来填充它,最后只需使用它作为参数来调用您的函数。。。。对我来说效果很好,我只是在一个带有签名的函数上测试了它
void test\u fn(char*,char**,unsigned char)用C写的

谢谢。我试过了,但对我不起作用
SixBuffers=c_char_p*6 arpDestBuffers=SixBuffers(*[c_char_p(create_string_buffer('\x00'*10).raw)for i in xrange(6)])打印类型(arpDestBuffers)、repr(arpDestBuffers)打印类型(arpDestBuffers[0])、repr(arpDestBuffers[0])
这有以下输出:
'
调用c API时会发生什么?缓冲区是空的吗?是问题吗?当将arpDestBuffers传递给该方法时,我得到了以下错误:
ctypes.ArgumentError:Argument2::不知道如何转换参数2
我尝试过的大多数方法都是一样的。我想我对Python的了解不够,无法实现您建议的。“你的指针”来自哪里?关于这个…谢谢你…本来应该是一个注释,但我猜它只是滑倒了…现在应该可以了:)你创建一个新类型(大小为“size”的指针数组)并调用构造函数并将其绑定到var。要填充var,我有:
var[:]=[为xrange(6)中的i创建字符串缓冲区(7963648)]
。看起来这个变量就是我想要的,但是当我尝试将它传递给方法时,仍然会得到一个
ctypes.ArgumentError
ctypes.ArgumentError:Argument2::不知道如何转换参数2
变量确实有效!谢谢我刚刚发现
参数2
实际上是指第二个参数。我以为是指第三次。现在这两个参数都很好。