新聞中心
Cython是結(jié)合了python和C的語(yǔ)法的一種語(yǔ)言,可以簡(jiǎn)單的認(rèn)為就是給Python加上了靜態(tài)類型后的語(yǔ)法。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的盤龍網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
python學(xué)習(xí)網(wǎng),大量的免費(fèi)python視頻教程,歡迎在線學(xué)習(xí)!
安裝Cython
如果已經(jīng)安裝過Cython可以跳過此步。安裝Cython需要使用easy_install,Python 2.7.9 以上的版本已經(jīng)自帶easy_install。在Visual Studio的命令提示符下完成(注意配合Python版本使用32位還是64位的Visual Studio的命令提示符,有可能需要以管理員權(quán)限運(yùn)行):
easy_install -U cython
使用Cython編譯
在PyCharm中新建工程,然后新建一個(gè)py文件:great_module.py,在該文件中輸入如下內(nèi)容:
def str_add(str1, str2): return int(str1) + int(str2)
這是一個(gè)簡(jiǎn)單的將字符串轉(zhuǎn)換為int求和的函數(shù)。為了使該函數(shù)能夠被Cython編譯,需要新建一個(gè)run.pyx文件,并加入如下內(nèi)容:
cdef public int str_add(const char* str1,const char* str2): return int(str1) + int(str2)
相關(guān)推薦:《Python入門教程》
這其中的cdef和public等都是cython關(guān)鍵字,這些關(guān)鍵字可以幫助函數(shù)可以被外部調(diào)用。然后在PyCharm中使用下面的命令編譯,生成run.h和run.c兩個(gè)文件。
cython run.pxy
Cython是支持Python的動(dòng)態(tài)類型特性的,如果后續(xù)步驟使用VS的命令行編譯也可以生成DLL,但是我在實(shí)驗(yàn)時(shí)不知為何無(wú)法提取到DLL中的函數(shù)地址,所以這里統(tǒng)一使用靜態(tài)類型,所有參數(shù)和返回值都使用Cython的靜態(tài)類型關(guān)鍵字規(guī)定好數(shù)據(jù)類型。
通過VS編譯得到動(dòng)態(tài)鏈接庫(kù)
在得到了.c和.h文件后,我們需要為其創(chuàng)建一個(gè)VS DLL工程。打開VS軟件,新建win32項(xiàng)目,其中應(yīng)用程序類型選擇DLL,附加選項(xiàng)選擇空項(xiàng)目。 將剛剛的.c和.h文件復(fù)制到項(xiàng)目存放代碼的文件夾并添加到項(xiàng)目中。在項(xiàng)目中添加一個(gè)空的dllmain.cpp,并添加如下代碼:
#include#include #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初始化的時(shí)候調(diào)用,這是python3的寫法,python2改成,initrun()。參見生成的run.h PyInit_run(); break; case DLL_PROCESS_DETACH: Py_Finalize(); break; } return TRUE; }
右鍵項(xiàng)目,屬性,進(jìn)入VC++目錄標(biāo)簽頁(yè)。在包含路徑中添加Python的include路徑,如“C:\ProgramFiles\Python36\include”。在庫(kù)目錄中添加Python的lib,如“C:\Program Files\Python36\libs”。注意編譯的版本選擇Release,根據(jù)Python版本選擇x64平臺(tái)或x32平臺(tái)。 編譯后即可得到dll文件。
當(dāng)前標(biāo)題:創(chuàng)新互聯(lián)Python教程:python怎么封裝dll
URL分享:http://www.fisionsoft.com.cn/article/coeecdj.html


咨詢
建站咨詢
