欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用ctypes調(diào)用dll遇到的坑解決記錄

 更新時間:2023年12月22日 11:14:16   作者:小縱橫?Go學(xué)習(xí)日記  
這篇文章主要為大家介紹了python使用ctypes調(diào)用dll遇到的坑解決記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

使用ctypes調(diào)用dll遇到的坑

dll調(diào)用

from ctypes import *
dll = windll.LoadLibrary('MyDLL.ll')  # 方式1
dll = WinDLL('MyDLL.ll')  # 方式2
dll = CDLL('MyDLL.dll')  # 方式3
dll = cdll.LoadLibrary('MyDLL.dll') # 方式4
# 以上4中調(diào)用方式差不多

問題分析

報錯OSError: [WinError 126] 找不到指定的模塊

2個原因:

1. dll的路徑寫錯了,

2. 缺少相關(guān)依賴庫

我本機裝的 vs2017,但是我拿到的dll是vs2012編譯的,會有問題,我用vs2017重新編譯后就解決了這個問題.

還有可能遇到dll無效的問題,這個是版本的原因,64位的python對應(yīng)64位的dll,32位對應(yīng)32位即可.

dll內(nèi)方法的調(diào)用

出現(xiàn) access violation reading 0x0000000025F0FA60這種異常,出現(xiàn)在函數(shù)需要傳遞指針的時候,解決辦法需要指定argtypes.

dll.CreateProcess.restype = c_void_p   # 對應(yīng)c的void*
theEnv = dll.CreateProcess()
# 指定參數(shù)類型
dll.Initialization.argtypes = [c_void_p,c_char_p,c_char_p,c_char_p]
p1 = c_char_p("xxx1.txt".encode('utf-8'))
p2 = c_char_p("xxx2.txt".encode('utf-8'))
p3 = c_char_p("xxx3.txt".encode('utf-8'))
ret = c_int(0)
# 此處傳遞過來的參數(shù)也需要是對應(yīng)的類型的參數(shù)
ret = dll.Initialization(theEnv, p1, p2 ,p3)
# ctypes里沒有c_int的指針類型,這里需要用POINTER自己定義一下
c_int_p = POINTER(c_int*100)  
faultID = c_int_p()
dll.GetFaultList.argtypes = [c_void_p,c_int_p]
dll.GetFaultList.restype = c_int
# 這里faultID傳參時不要忘了用類型包裝,否則就會出現(xiàn)access violation異常
rtn = dll.GetFaultList(theEnv, c_int_p(faultID))

以上就是python使用ctypes調(diào)用dll遇到的坑解決記錄的詳細(xì)內(nèi)容,更多關(guān)于python ctypes調(diào)用dll坑的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論