我正在从Python访问C++共享库。C++共享库管理信号分析器,并且没有源代码分发。在
其中一个函数需要将一个结构传递到函数调用中,我不确定是否使用ctypes正确地执行了该操作。在
头文件中结构的定义是:
typedef struct saIQPacket {
float *iqData;
int iqCount;
int purge;
int dataRemaining;
int sampleLoss;
int sec;
int milli;
} saIQPacket;
最后我调用的函数是:
^{pr2}$在python中,我创建了一个类,如下所示:
class IQPacketData (ct.Structure):
_fields_ = [('iqData',ct.c_float*48611),
('iqCount',ct.c_int),
('purge', ct.c_int),
('dataRemaining', ct.c_int),
('sampleLoss', ct.c_int),
('sec', ct.c_int),
('milli', ct.c_int)]
然后我使用上述方法:
self.iqPurge = ct.c_int(0)
self.iqDataRemaining = ct.c_int(0)
self.iqSampleLoss = ct.c_int(0)
self.secondsRemaining = ct.c_int(0)
self.millisecondsRemaining = ct.c_int(0)
self.iqarraySize = ct.c_int(24305)
self.iqArr = (ct.c_float*48611)()
self.saIQPacketData = IQPacketData(self.iqArr,
self.iqarraySize,
self.iqPurge,
self.iqDataRemaining,
self.iqSampleLoss,
self.secondsRemaining,
self.millisecondsRemaining)
初始化设备后,我按如下方式调用函数:
err = self.dll.saGetIQData(self.deviceHandle,ct.pointer(self.saIQPacketData))
当函数运行时,它返回一个值-1,这将转换为空指针错误。我构造结构并将其传递给函数调用的方式是否有问题?在
正如@eryksun在评论中建议的那样,这个问题属于类型。以下工作代码供将来参考:
结构应该是:
创建实例:
^{pr2}$最后调用函数:
注意:数组大小参数是实际数组大小的一半。函数为每个样本(复杂的IQ数据)将2个交错浮点放入数组中。在
使用Numpy将数组指针转换回python数组:
相关问题 更多 >
编程相关推荐