日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:python怎么封裝dll

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

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網(wǎng)站制作、網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的盤龍網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!

python學習網(wǎng),大量的免費python視頻教程,歡迎在線學習!

安裝Cython

如果已經(jīng)安裝過Cython可以跳過此步。安裝Cython需要使用easy_install,Python 2.7.9 以上的版本已經(jīng)自帶easy_install。在Visual Studio的命令提示符下完成(注意配合Python版本使用32位還是64位的Visual Studio的命令提示符,有可能需要以管理員權限運行):

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)

相關推薦:《Python入門教程》

這其中的cdef和public等都是cython關鍵字,這些關鍵字可以幫助函數(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ī)定好數(shù)據(jù)類型。

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

在得到了.c和.h文件后,我們需要為其創(chuàng)建一個VS DLL工程。打開VS軟件,新建win32項目,其中應用程序類型選擇DLL,附加選項選擇空項目。 將剛剛的.c和.h文件復制到項目存放代碼的文件夾并添加到項目中。在項目中添加一個空的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初始化的時候調(diào)用,這是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,根據(jù)Python版本選擇x64平臺或x32平臺。 編譯后即可得到dll文件。


文章標題:創(chuàng)新互聯(lián)Python教程:python怎么封裝dll
路徑分享:http://m.5511xx.com/article/coeecdj.html