小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

python3.7使用ctypes調(diào)用dll函數(shù)(含指向數(shù)組的指針)

 yxb0001 2020-05-05

python可以通過外接庫ctypes很方便地調(diào)用c語言編寫的dll函數(shù),若是c++語言編寫的,則首先需用c語言封裝,這是因編譯器對此兩者的函數(shù)名處理不同,而會產(chǎn)生一些差別,從而影響到后續(xù)編程。至于如何封裝,可尋找相關(guān)資料,這里略。

ctypes調(diào)用dll函數(shù)的關(guān)鍵是使函數(shù)的形參與實參的類型統(tǒng)一,若形參與實參是指針、指向數(shù)組的指針也一樣。另外,函數(shù)輸出數(shù)據(jù)的類型也需統(tǒng)一。下面舉例。

dll的c源碼:

__declspec(dllexport) float summ(int len, float *p)

{

int i;

float sum = 0;

for (i = 0; i < len; i++)

{

sum = sum + *(p + i);

}

return sum;

}

分析:源碼中summ()函數(shù)形參,一個整型加一個浮點型的指向數(shù)組的指針;而返回值是一個浮點型。

python3.7的編程與注釋如下:

from ctypes import *

# 有兩種調(diào)用方式,下面是一種,使用CDLL("PATH")

dll = CDLL("dll的具體路徑")

# 另一種是cdll屬性調(diào)用,如:cdll.LoadLibrary("dll的具體路徑")

# 下述是python列表

aa = [1.2,2.3,5.6,2.5,8.9,5,14,15.8]

# 設(shè)置函數(shù)summ輸入屬性argtypes,統(tǒng)一函數(shù)形參與實參類型

# POINTER(c_float*len(aa)是浮點型的指向數(shù)組的指針,數(shù)組長度是列表aa的長度len

dll.summ.argtypes = [c_int,POINTER(c_float*len(aa))]

# 設(shè)置函數(shù)summ輸出屬性restype,確定函數(shù)輸出數(shù)據(jù)類型

dll.summ.restype = c_float

# 列表轉(zhuǎn)化為數(shù)組

aa_arr = (c_float*len(aa))(*aa)

# 求函數(shù)值(小數(shù)點保留二位有效數(shù)字)

sum1 = dll.summ(len(aa), aa_arr)

print(round(sum1,2))

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多