您好,登錄后才能下訂單哦!
這篇文章主要介紹了python封裝dll的方法,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
Cython是結合了Python和C的語法的一種語言,可以簡單的認為就是給Python加上了靜態類型后的語法。
python學習網,大量的免費python視頻教程,歡迎在線學習!
安裝Cython
如果已經安裝過Cython可以跳過此步。安裝Cython需要使用easy_install,Python 2.7.9 以上的版本已經自帶easy_install。在Visual Studio的命令提示符下完成(注意配合Python版本使用32位還是64位的Visual Studio的命令提示符,有可能需要以管理員權限運行):
easy_install -U cython
使用Cython編譯
在PyCharm中新建工程,然后新建一個py文件:great_module.py,在該文件中輸入如下內容:
def str_add(str1, str2): return int(str1) + int(str2)
這是一個簡單的將字符串轉換為int求和的函數。為了使該函數能夠被Cython編譯,需要新建一個run.pyx文件,并加入如下內容:
cdef public int str_add(const char* str1,const char* str2): return int(str1) + int(str2)
這其中的cdef和public等都是cython關鍵字,這些關鍵字可以幫助函數可以被外部調用。然后在PyCharm中使用下面的命令編譯,生成run.h和run.c兩個文件。
cython run.pxy
Cython是支持Python的動態類型特性的,如果后續步驟使用VS的命令行編譯也可以生成DLL,但是我在實驗時不知為何無法提取到DLL中的函數地址,所以這里統一使用靜態類型,所有參數和返回值都使用Cython的靜態類型關鍵字規定好數據類型。
通過VS編譯得到動態鏈接庫
在得到了.c和.h文件后,我們需要為其創建一個VS DLL工程。打開VS軟件,新建win32項目,其中應用程序類型選擇DLL,附加選項選擇空項目。 將剛剛的.c和.h文件復制到項目存放代碼的文件夾并添加到項目中。在項目中添加一個空的dllmain.cpp,并添加如下代碼:
#include <Python.h> #include <Windows.h> #include "run.h" extern "C" { __declspec(dllexport) int __stdcall _str_add(const char * a, const char * b) { return str_add(a, b); } } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: Py_Initialize(); //dll初始化的時候調用,這是python3的寫法,python2改成,initrun()。參見生成的run.h PyInit_run(); break; case DLL_PROCESS_DETACH: Py_Finalize(); break; } return TRUE; }
右鍵項目,屬性,進入VC++目錄標簽頁。在包含路徑中添加Python的include路徑,如“C:\ProgramFiles\Python36\include”。在庫目錄中添加Python的lib,如“C:\Program Files\Python36\libs”。注意編譯的版本選擇Release,根據Python版本選擇x64平臺或x32平臺。 編譯后即可得到dll文件。
感謝你能夠認真閱讀完這篇文章,希望小編分享python封裝dll的方法內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。