回覆列表
  • 1 # 科技夢想秀

    python呼叫動態庫有兩種型別,主要看dll的匯出函式的呼叫約定:__stdll和__cdecl

    對應的動態庫的呼叫方式為

    ctypes.cdll.LoadLibrary( "test.dll" )對應__cdecl呼叫方式

    ctypes.windll.LoadLibrary( "test.dll" )對應_stdll呼叫方式

  • 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種常見的引數傳遞情況,當然還包括其它的,諸如傳遞結構體、數值陣列等型別的情況,詳細情況可參考以前的文章。

  • 中秋節和大豐收的關聯?
  • 鋼的效能特點?