-
1 # 科技夢想秀
-
2 # 小小猿愛嘻嘻
這個不難,主要用到python自帶的ctypes這個模組,下面我簡單介紹一下實現過程,實驗環境win10+python3.6+pycharm5.0,主要內容如下:
1.這裡為了方便說明問題,我編譯了一個簡單的dll庫,原始碼如下,很簡單,一個含引數的mul函式:
編譯成功後,會在當前的release目錄下生成一個dllTest.dll檔案,後面我們的程式碼就是呼叫這個檔案,如下:
2.接著我們新建py檔案,將上面的dll檔案移到和這個py檔案同級目錄下,直接使用CDLL載入這個dll庫就行(或者自己指定載入路徑也行),主要程式碼如下,非常簡單:
程式執行截圖如下,已經成功呼叫add函式,並返回執行結果:
3.這裡我們也可以使用WinDLL載入dll庫,基本步驟一樣,直接呼叫就行,如下:
程式執行截圖如下:
至此,我們就完成了利用python來呼叫dll庫。總的來說,整個過程很簡單,程式碼量也不多,很好理解,CDLL和WinDLL這2種方式都可以快速完成,只要你熟悉一下相關程式碼和示例,多練習幾遍,很快就能掌握的,網上也有相關教程和資料,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言。
-
3 # 編碼那些事
python中可使用ctypes模組呼叫dll檔案中的庫函式。
例如一個dll檔案“MyDll.dll”,其函式約定的呼叫方式為C呼叫(cdecl)方式,則Python中載入該dll檔案的程式碼如下:
若DLL函式的呼叫約定是標準呼叫約定(stdcall)方式,則DLL檔案的載入程式碼則改為:
dll = WinDLL("MyDll.dll")
下面給出幾種不同型別的引數傳遞情況示例。
1、函式引數為數值情況
這是最簡單的情況,設C語言函式宣告如下:
Python中呼叫方式為:
2、函式引數為指標情況
設C語言函式實現程式碼如下:
Python中呼叫方式為:
也可以為:
3、函式引數為字串情況
設C語言函式實現程式碼如下,其功能是對於輸入pStr1賦值為“StrIn”,對於輸出返回一個指向字串常量“strOut”的指標:
Python中呼叫方式為:
這兒只列舉了3種常見的引數傳遞情況,當然還包括其它的,諸如傳遞結構體、數值陣列等型別的情況,詳細情況可參考以前的文章。
回覆列表
python呼叫動態庫有兩種型別,主要看dll的匯出函式的呼叫約定:__stdll和__cdecl
對應的動態庫的呼叫方式為
ctypes.cdll.LoadLibrary( "test.dll" )對應__cdecl呼叫方式
ctypes.windll.LoadLibrary( "test.dll" )對應_stdll呼叫方式