日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 空指针_Python&CType空指针错误

發布時間:2023/12/4 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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空指针错误的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。