我有一个包含C函数的DLL,其原型如下:
int c_read_block(uint32 addr, uint32 *buf, uint32 num);
我想用ctypes从Python调用它。函数需要一个指向内存块的指针,将结果写入内存块。我不知道如何构造和传递这样一块内存。ctypes文档没有多大帮助。
构造一个数组并传递它“byref”,如下所示:
cresult = (c_ulong * num)() err = self.c_read_block(addr, byref(cresult), num)
给出此错误消息:
ArgumentError: argument 3: <type 'exceptions.TypeError'>: expected LP_c_ulong instance instead of pointer to c_ulong_Array_2
我想这是因为Python ulong数组与c uint32数组完全不同。我应该用create_char_string
。如果是,我如何说服Python将缓冲区“投”给LP_c_ulong?
解决方案中有一个拼写错误。为了获得指向一个ulong数组的指针,需要将其转换为
POINTER(list of ulong)
可以使用^{} 函数进行强制转换:)
您可以强制转换结果,但是
ctypes
允许您直接使用数组代替指针。问题在于代码中的byref
(相当于指向指针的指针):所以不是:
尝试:
相关问题 更多 >
编程相关推荐