文章目錄提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
懷來(lái)網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
提示:這里可以添加本文要記錄的大概內(nèi)容:
python 通過(guò)ctypes包調(diào)用c++或者c 的方法
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
C++中通過(guò) extern “C” { xxxx } 將需要python調(diào)用的方法 包含起來(lái),然后打包編譯即可,C則不需要使用extern直接就能調(diào)用,例如:
extern "C" {ECG_Info cpeek5(int a, int b, int c, int d, int e, int* fdat)
{ECG_Info ecgInfo;
*fdat = 1000;
printf("%d",*fdat);
ecgInfo.a= 1;
return ecgInfo;
}
}
進(jìn)行編譯,例如:
#如果編譯的環(huán)境配置不匹配,linux切換編譯環(huán)境(提前安裝更新好c++編譯環(huán)境)
scl enable devtoolset-9 bash
#編譯
gcc test.cpp -fPIC -shared -o test.so -lstdc++
二、Python代碼
1.引入庫(kù)代碼如下(示例):
import ctypes
or
from ctypes import *
#傳遞結(jié)構(gòu)體作為參數(shù)或者返回值
class Ecginfo(Structure):
_fields_ = [
("a", c_int),
("b", c_int),
("c", c_int),
("d", c_short),
("e", c_char)
]
#加載so文件
productC = cdll.LoadLibrary('/home/hd/mlflow/data/github/c/EPLimited_fix_datatest/a_product.so')
cpeek5= productC.cpeek5
#設(shè)置方法參數(shù)類型
cpeek5.argtypes=[ctypes.c_int,ctypes.c_int,ctypes.c_int,ctypes.c_int,ctypes.c_int,ctypes.POINTER(ctypes.c_int)]
#設(shè)置方法返回值類型
cpeek4.restype=Ecginfo
#調(diào)用方法
fdat_p = ctypes.pointer(ctypes.c_int(0)) # 傳遞指針變量
product_peek = cpeek5(ctypes.c_int(dat[i]),ctypes.c_int(filted[i]),ctypes.c_int(884),ctypes.c_int(100),ctypes.c_int(60),fdat_p)
#打印修改后的指針變量的結(jié)果,值發(fā)生了改變
print("fdatum: "+str(fdat_p[0]))
主要對(duì)python調(diào)用c++的方式介紹,并傳遞指針變量 , 常規(guī)變量 和 對(duì)象作為返回值的demo。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧