色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何使用python的ctypes調(diào)用醫(yī)保中心的dll動(dòng)態(tài)庫(kù)下載醫(yī)保中心的賬單

瀏覽:99日期:2022-07-24 16:21:11

需求:根據(jù)醫(yī)保中心的文檔和提供的dll動(dòng)態(tài)庫(kù)調(diào)用相關(guān)接口下載醫(yī)保中心的賬單。

文檔:對(duì)調(diào)用dll動(dòng)態(tài)庫(kù)的描述,調(diào)用哪個(gè)dll文件,同時(shí)了解清楚調(diào)用這個(gè)dll文件中的哪個(gè)函數(shù)。

如何使用python的ctypes調(diào)用醫(yī)保中心的dll動(dòng)態(tài)庫(kù)下載醫(yī)保中心的賬單

分析:結(jié)合文檔及相關(guān)介紹弄清楚相關(guān)接口調(diào)用流程,從以上可以看出接口調(diào)用的是SiInterface.dll文件,然后先調(diào)用INIT函數(shù)進(jìn)行初始化,然后再調(diào)用BUSINESS_HANDLE函數(shù)在醫(yī)保局簽到,然后在次調(diào)用BUSINESS_HANDLE函數(shù)下載賬單,同時(shí)根據(jù)文檔分析出每次調(diào)用函數(shù)的出入?yún)ⅰ#ň唧w的調(diào)用流程及每個(gè)函數(shù)的出入?yún)⒁欢ㄒ鶕?jù)完整的醫(yī)保中心的文檔來(lái)分析)

代碼簡(jiǎn)介:由于簽到和下載賬單調(diào)用的是同一個(gè)函數(shù),區(qū)別就只是出入?yún)⒉煌源a中只會(huì)展示調(diào)用INIT函數(shù)和BUSINESS_HANDLE函數(shù)進(jìn)行簽到,下載的那一部分不寫(xiě)。

代碼:

from ctypes import *import osos.environ[’path’] += ’;C:localDll’ #添加dll依賴(lài)庫(kù)目錄到系統(tǒng)環(huán)境 def getBusiness(): pDll = windll.LoadLibrary('SiInterface.dll') str = ’’ # 動(dòng)態(tài)庫(kù)初始化,成功的結(jié)果為0 res = pDll.INIT(str) print(res) qiandao = ’9100^100006^zzjdz^^^0000^^1^’ yewuzhouqi = create_string_buffer(1024) p_qiandao = c_char_p() p_qiandao.value=qiandao.encode('utf-8') res2 = pDll.BUSINESS_HANDLE(p_qiandao, yewuzhouqi) #打印返回結(jié)果 print(res2) print(yewuzhouqi.value) yu=yewuzhouqi.value.decode() print(yu) if __name__=='__main__': getBusiness()

代碼詳細(xì)介紹:

1、ctypes是python系統(tǒng)自帶的一個(gè)庫(kù),不需要刻意安裝。本代碼使用的python版本為3.7.

2、os.environ[’path’] += ’;C:localDll’。醫(yī)保中心提供的動(dòng)態(tài)庫(kù)不是單個(gè)的dll文件,而是一堆的文件,這些dll文件中都有相互引用的關(guān)系,如果直接通過(guò)絕對(duì)路徑去加載這個(gè)SiInterface.dll文件,程序會(huì)直接報(bào)錯(cuò)說(shuō)找不到指定的模塊,所以將那一堆的dll文件放在C:localDll c盤(pán)下的localDll文件夾下,C:localDll可以替換成你自己的動(dòng)態(tài)庫(kù)所在的文件夾下,該命令是將動(dòng)態(tài)庫(kù)的路徑添加到系統(tǒng)的環(huán)境環(huán)境下,下面調(diào)用SiInterface.dll文件的時(shí)候可以直接從系統(tǒng)環(huán)境中找到,不用寫(xiě)絕對(duì)路徑和相對(duì)路徑。

3、pDll = windll.LoadLibrary('SiInterface.dll')。加載動(dòng)態(tài)庫(kù)文件,加載的語(yǔ)法有很多,比如CDLL等,如果該命令不行的話可以嘗試其它三種加載動(dòng)態(tài)庫(kù)的方式。

4、res = pDll.INIT(str)。調(diào)用動(dòng)態(tài)庫(kù)初始化函數(shù)進(jìn)行初始化,初始化沒(méi)有入?yún)ⅲ詓tr=''就行。

5、qiandao = ’9100^100006^zzjdz^^^0000^^1^’ #入?yún)⒌淖址? yewuzhouqi = create_string_buffer(1024) #給出參分配1024字節(jié)的內(nèi)存空間 p_qiandao = c_char_p() #聲明入?yún)⑹荂語(yǔ)言中的指針 char *p p_qiandao.value=qiandao.encode('utf-8') #將入?yún)⑥D(zhuǎn)為bytes數(shù)組并賦值給入?yún)⒌牡刂匪赶虻膬?nèi)存空間。

注意:入?yún)⒑统鰠⒍际莄har *p,為什么不把出參聲明成一個(gè)c_char_p()?可以,但坑爹的是那個(gè)動(dòng)態(tài)庫(kù)要修改出參指針?biāo)赶騼?nèi)存中的值,所以直接聲明出參指針,而不申請(qǐng)出參所指向的內(nèi)存大小的值會(huì)發(fā)生內(nèi)存泄漏導(dǎo)致python直接停止運(yùn)行。create_string_buffer(1024)相當(dāng)于C語(yǔ)言的malloc函數(shù),C語(yǔ)言聲明一個(gè)指針類(lèi)型的結(jié)構(gòu)體的時(shí)候要給這個(gè)結(jié)構(gòu)體分配內(nèi)存的大小空間。

6、res2 = pDll.BUSINESS_HANDLE(p_qiandao, yewuzhouqi)。調(diào)用BUSINESS_HANDLE函數(shù),函數(shù)會(huì)有一個(gè)返回值res2,同時(shí)函數(shù)還會(huì)改變出參yewuzhouqi這個(gè)指針?biāo)赶虻膬?nèi)存的值。

7、print(res2) print(yewuzhouqi.value)

打印函數(shù)的返回值和出參的值。

8、yu=yewuzhouqi.value.decode() print(yu)

將出參的bytes數(shù)組轉(zhuǎn)為str字符串。

總結(jié)

到此這篇關(guān)于如何使用python的ctypes調(diào)用醫(yī)保中心的dll動(dòng)態(tài)庫(kù)下載醫(yī)保中心的賬單的文章就介紹到這了,更多相關(guān)python ctypes調(diào)用dll動(dòng)態(tài)庫(kù)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 三级毛片在线看 | 国产精品久久久久激情影院 | 亚洲国产视频网 | 性欧美video另类bd | 欧美一级毛片免费看 | 久久亚洲私人国产精品 | 日韩18在线观看 | 国产午夜精品理论片小yo奈 | 99精品国产成人一区二区 | cao在线视频 | 免费观看情趣v视频网站 | 欧美日本韩国一区二区 | 国产在线视频网址 | 一区二区三区日本视频 | 看一级特黄a大片国产 | 日韩美女视频一区 | 久草草视频在线观看免费高清 | 久久99九九精品免费 | 鸥美毛片 | 亚洲人成在线免费观看 | 无国产精品白浆是免费 | 亚洲乱视频 | 蜜桃88av| 91精品国产色综合久久 | 免费一级片网站 | 欧美亚洲国产精品久久 | 久久久久9999| 成人夜色视频网站在线观看 | 精品一区二区三区视频在线观看免 | 免费又黄又爽的视频 | 亚洲国产成人在人网站天堂 | 成人公开视频 | 亚洲欧洲日本天天堂在线观看 | 亚洲日本高清 | 亚洲一区二区成人 | 欧美成人久久一级c片免费 欧美成人看片黄a免费 | 高清一本之道加勒比在线 | 黄视频在线免费 | 偷拍自拍第一页 | 18免费视频 | 久久精品国产精品亚洲人人 |