国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

如何使用python的ctypes調用醫保中心的dll動態庫下載醫保中心的賬單

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

需求:根據醫保中心的文檔和提供的dll動態庫調用相關接口下載醫保中心的賬單。

文檔:對調用dll動態庫的描述,調用哪個dll文件,同時了解清楚調用這個dll文件中的哪個函數。

如何使用python的ctypes調用醫保中心的dll動態庫下載醫保中心的賬單

分析:結合文檔及相關介紹弄清楚相關接口調用流程,從以上可以看出接口調用的是SiInterface.dll文件,然后先調用INIT函數進行初始化,然后再調用BUSINESS_HANDLE函數在醫保局簽到,然后在次調用BUSINESS_HANDLE函數下載賬單,同時根據文檔分析出每次調用函數的出入參。(具體的調用流程及每個函數的出入參一定要根據完整的醫保中心的文檔來分析)

代碼簡介:由于簽到和下載賬單調用的是同一個函數,區別就只是出入參不同,所以代碼中只會展示調用INIT函數和BUSINESS_HANDLE函數進行簽到,下載的那一部分不寫。

代碼:

from ctypes import *import osos.environ[’path’] += ’;C:localDll’ #添加dll依賴庫目錄到系統環境 def getBusiness(): pDll = windll.LoadLibrary('SiInterface.dll') str = ’’ # 動態庫初始化,成功的結果為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) #打印返回結果 print(res2) print(yewuzhouqi.value) yu=yewuzhouqi.value.decode() print(yu) if __name__=='__main__': getBusiness()

代碼詳細介紹:

1、ctypes是python系統自帶的一個庫,不需要刻意安裝。本代碼使用的python版本為3.7.

2、os.environ[’path’] += ’;C:localDll’。醫保中心提供的動態庫不是單個的dll文件,而是一堆的文件,這些dll文件中都有相互引用的關系,如果直接通過絕對路徑去加載這個SiInterface.dll文件,程序會直接報錯說找不到指定的模塊,所以將那一堆的dll文件放在C:localDll c盤下的localDll文件夾下,C:localDll可以替換成你自己的動態庫所在的文件夾下,該命令是將動態庫的路徑添加到系統的環境環境下,下面調用SiInterface.dll文件的時候可以直接從系統環境中找到,不用寫絕對路徑和相對路徑。

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

4、res = pDll.INIT(str)。調用動態庫初始化函數進行初始化,初始化沒有入參,所以str=''就行。

5、qiandao = ’9100^100006^zzjdz^^^0000^^1^’ #入參的字符串 yewuzhouqi = create_string_buffer(1024) #給出參分配1024字節的內存空間 p_qiandao = c_char_p() #聲明入參是C語言中的指針 char *p p_qiandao.value=qiandao.encode('utf-8') #將入參轉為bytes數組并賦值給入參的地址所指向的內存空間。

注意:入參和出參都是char *p,為什么不把出參聲明成一個c_char_p()?可以,但坑爹的是那個動態庫要修改出參指針所指向內存中的值,所以直接聲明出參指針,而不申請出參所指向的內存大小的值會發生內存泄漏導致python直接停止運行。create_string_buffer(1024)相當于C語言的malloc函數,C語言聲明一個指針類型的結構體的時候要給這個結構體分配內存的大小空間。

6、res2 = pDll.BUSINESS_HANDLE(p_qiandao, yewuzhouqi)。調用BUSINESS_HANDLE函數,函數會有一個返回值res2,同時函數還會改變出參yewuzhouqi這個指針所指向的內存的值。

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

打印函數的返回值和出參的值。

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

將出參的bytes數組轉為str字符串。

總結

到此這篇關于如何使用python的ctypes調用醫保中心的dll動態庫下載醫保中心的賬單的文章就介紹到這了,更多相關python ctypes調用dll動態庫內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产大片线上免费看 | 爱爱亚洲 | 国产精品成人一区二区不卡 | 黄www片 | 欧美日韩中 | 久久合| 男女性关系视频免费观看软件 | 欧美极度极度另类 | 99精品免费在线 | 国产精品99久久久久久宅男 | 亚洲高清自拍 | 亚洲精品国产精品国自产网站 | 加勒比色综合久久久久久久久 | 国产成人精品久久一区二区小说 | 国产第一页在线观看 | 亚洲精品成人一区二区www | 国产精品久久久久久免费 | 欧美性一区二区三区 | 在线观看亚洲成人 | ⅹxx中国xxx人妖 | 久草资源视频 | 久久精品国产精品亚洲人人 | 久久女厕一次看个够 | 日韩在线观看一区二区三区 | 亚洲自拍偷拍图 | 国内精品久久久久久野外 | 国产精品一区久久 | 一级a毛片免费观看久久精品 | 91视频最新网站 | 欧美精品成人久久网站 | 在线观看 国产 | 99精品网 | 狼人总合狼人综合 | 国产精品久久久久久一区二区三区 | 成人国产在线观看 | 国产欧美另类久久久精品免费 | 狠狠澡夜夜澡人人爽 | 久久永久免费视频 | 仑乱高清在线一级播放 | 国产三区二区 | bt天堂国产亚洲欧美在线 |