如何使用Python呼叫dll動態鏈結庫?

2021-09-02 20:06:41 字數 1219 閱讀 7403

.dll是使用c或者c++編譯的動態鏈結庫,一般留有函式入口可以進行呼叫。

首先我們通過閱讀原專案的原始碼,找到入口的函式名稱、傳參規則和型別、返回值型別。

然後使用python ctype庫載入dll庫,並且呼叫函式,得到返回值。

我們發現原專案中可以這樣呼叫

recognize(content=>bytes, len(content)=>int)

return "1234"=>str

這意味著,我們在python中呼叫的時候可以把recognize這個函式作為入口。

網路上ctype的資料很多,這裡不多說,直接上**和注釋。

from ctypes import *

dll = windll.loadlibrary("ocr.dll") # 載入鏈結庫

ocr = dll.ocr # 把function賦值

ocr.argtypes = [c_char_p, c_int] # 指定傳入引數的型別,這裡的c_char_p和c_int分別代表二進位制型別和整型

ocr.restype = c_char_p # 指定返回值型別(這裡有個坑,如果返回得不到你想要的結果,可以分別嘗試c_char_p和c_wchar_p)

# 這裡開啟一張來構造乙個二進位制資料

r = dll.ocr(content, len(content)) # 按照指定型別傳入資料

print(r) # 得到返回值

print(r.decode("utf-8"))

這裡注意:如果ocr這個函式返回二進位制型別但是選擇字串型別作為返回值,程式會自動幫你解碼,但是解碼結果存在問題。所以這裡最好把返回值型別指定為二進位制!

說明dll檔案只支援32位呼叫,你可以安裝乙個32位的python使用。

dll = cdll.loadlibrary(「ocr.dll」)

dll = windll.loadlibrary(「ocr.dll」)

如果報錯可以試一下另外一種載入方式

參考:

dll反編譯:

官方文件:

參考1:

參考2:

python呼叫dll方法

在python中呼叫dll檔案中的介面比較簡單,例項 如下 如我們有乙個test.dll檔案,內部定義如下 extern c 在python中我們可以用以下兩種方式載入1.import ctypes dll ctypes.windll.loadlibrary test.dll 2.import ct...

python呼叫dll方法

在python中呼叫dll檔案中的介面比較簡單,例項 如下 如我們有乙個test.dll檔案,內部定義如下 extern c 在python中我們可以用以下兩種方式載入1.import ctypes dll ctypes.windll.loadlibrary test.dll 2.import ct...

python呼叫dll詳解

參考鏈結 windows安裝mingw w64教程 公司業務需要,讓我用python呼叫領導寫好的dll庫,經過一段時間的研究,終於呼叫成功,特此來記錄一下過程 開發環境win10 python3.6.8 64位 安裝這個的目的是生成dll檔案用,參考位址在上面,講一下注意的點。安裝的時候versi...