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)用方式差不多問題分析
報(bào)錯OSError: [WinError 126] 找不到指定的模塊
2個原因:
1. dll的路徑寫錯了,
2. 缺少相關(guān)依賴庫
我本機(jī)裝的 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)文章
Python 刪除整個文本中的空格,并實(shí)現(xiàn)按行顯示
今天小編就為大家分享一篇Python 刪除整個文本中的空格,并實(shí)現(xiàn)按行顯示,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
在自動化中用python實(shí)現(xiàn)鍵盤操作的方法詳解
今天小編就為大家分享一篇在自動化中用python實(shí)現(xiàn)鍵盤操作的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
Python圖像處理模塊ndimage用法實(shí)例分析
這篇文章主要介紹了Python圖像處理模塊ndimage用法,結(jié)合實(shí)例形式分析了Python圖像處理模塊ndimage基本功能及常見的圖形運(yùn)算操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-09-09
spark?dataframe全局排序id與分組后保留最大值行
這篇文章主要為大家介紹了spark?dataframe全局排序id與分組后保留最大值行實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Python快速實(shí)現(xiàn)分列轉(zhuǎn)到行的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Python快速實(shí)現(xiàn)分列轉(zhuǎn)到行的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)一下2023-03-03
編寫Python腳本來獲取Google搜索結(jié)果的示例
這篇文章主要介紹了編寫Python腳本來獲取Google搜索結(jié)果的示例,也是利用Python編寫爬蟲的一個簡單實(shí)現(xiàn),需要的朋友可以參考下2015-05-05

