python 空指针_Python&CType空指针错误
我正在從Python訪問C++共享庫。 C++共享庫管理信號分析器,并且在沒有源代碼的情況下分發。Python&CType空指針錯誤
其中一個功能需要一個結構被傳遞到函數調用,我不知道我正在使用ctypes正確地做它。
在頭文件中的結構定義是:
typedef struct saIQPacket {
float *iqData;
int iqCount;
int purge;
int dataRemaining;
int sampleLoss;
int sec;
int milli;
} saIQPacket;
而且我最終調用的函數:
SA_API saStatus saGetIQData(int device, saIQPacket *pkt);
在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翻譯作為一個空指針誤差。我構造struct并將它傳遞給函數調用的方式有什么問題嗎?
2017-04-25
wgebers
+0
'iqData'應該是一個'浮子*',而不是陣列。將其更改為'ct.POINTER(ct.c_float)'。您仍然可以將數組分配給該字段。 ctypes足夠聰明,可以驗證數組元素類型是否正確,并將地址存儲在struct字段中,同時在struct __objects中保留對基礎數組的引用。 –
+0
不需要手動將整數值包裝為'c_int'實例。此外,調用可以使用'ct.byref(self.saIQPacketData)'而不是分配一個指針。 –
+0
謝謝@eryksun。更改iqData的類型并將指針傳遞給構造函數可解決問題。 –
總結
以上是生活随笔為你收集整理的python 空指针_Python&CType空指针错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3d目标检测_CVPR 2020 |基用
- 下一篇: python删除列表中的重复值_如何从