成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python封裝dll的方法-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

成都創(chuàng)新互聯(lián)公司電話聯(lián)系:18980820575,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)頁制作領(lǐng)域十載,包括成都玻璃貼膜等多個方面擁有豐富設(shè)計經(jīng)驗,選擇成都創(chuàng)新互聯(lián)公司,為企業(yè)錦上添花。

這篇文章主要介紹了python封裝dll的方法,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

Cython是結(jié)合了Python和C的語法的一種語言,可以簡單的認為就是給Python加上了靜態(tài)類型后的語法。

python學(xué)習(xí)網(wǎng),大量的免費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)限運行):

easy_install -U cython

使用Cython編譯

在PyCharm中新建工程,然后新建一個py文件:great_module.py,在該文件中輸入如下內(nèi)容:

def str_add(str1, str2):
  return int(str1) + int(str2)

這是一個簡單的將字符串轉(zhuǎn)換為int求和的函數(shù)。為了使該函數(shù)能夠被Cython編譯,需要新建一個run.pyx文件,并加入如下內(nèi)容:

cdef public int str_add(const char* str1,const char* str2):
  return int(str1) + int(str2)

這其中的cdef和public等都是cython關(guān)鍵字,這些關(guān)鍵字可以幫助函數(shù)可以被外部調(diào)用。然后在PyCharm中使用下面的命令編譯,生成run.h和run.c兩個文件。

cython run.pxy

Cython是支持Python的動態(tài)類型特性的,如果后續(xù)步驟使用VS的命令行編譯也可以生成DLL,但是我在實驗時不知為何無法提取到DLL中的函數(shù)地址,所以這里統(tǒng)一使用靜態(tài)類型,所有參數(shù)和返回值都使用Cython的靜態(tài)類型關(guān)鍵字規(guī)定好數(shù)據(jù)類型。

通過VS編譯得到動態(tài)鏈接庫

在得到了.c和.h文件后,我們需要為其創(chuàng)建一個VS DLL工程。打開VS軟件,新建win32項目,其中應(yīng)用程序類型選擇DLL,附加選項選擇空項目。 將剛剛的.c和.h文件復(fù)制到項目存放代碼的文件夾并添加到項目中。在項目中添加一個空的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初始化的時候調(diào)用,這是python3的寫法,python2改成,initrun()。參見生成的run.h
      PyInit_run();
      break;
    case DLL_PROCESS_DETACH:
      Py_Finalize();
      break;
  }
  return TRUE;
}

右鍵項目,屬性,進入VC++目錄標(biāo)簽頁。在包含路徑中添加Python的include路徑,如“C:\ProgramFiles\Python36\include”。在庫目錄中添加Python的lib,如“C:\Program Files\Python36\libs”。注意編譯的版本選擇Release,根據(jù)Python版本選擇x64平臺或x32平臺。 編譯后即可得到dll文件。

感謝你能夠認真閱讀完這篇文章,希望小編分享python封裝dll的方法內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細的解決方法等著你來學(xué)習(xí)!

文章名稱:python封裝dll的方法-創(chuàng)新互聯(lián)
分享URL:http://jinyejixie.com/article4/egdoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站標(biāo)簽優(yōu)化、網(wǎng)站制作、企業(yè)建站網(wǎng)站內(nèi)鏈、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
杭锦后旗| 扎囊县| 大宁县| 高邮市| 余庆县| 鄂托克旗| 漯河市| 巴东县| 黑河市| 大余县| 渭南市| 海丰县| 南川市| 南召县| 厦门市| 科技| 会宁县| 五河县| 明水县| 黄龙县| 自治县| 始兴县| 东至县| 玉龙| 南漳县| 图片| 彭州市| 吕梁市| 乐清市| 崇左市| 永宁县| 康保县| 正蓝旗| 海城市| 绥棱县| 汤原县| 枣阳市| 阳山县| 玉山县| 崇仁县| 仙桃市|