Python呼叫C++編寫的方法

蒹葭_csdn發表於2018-12-10

Python語言的處理速度不太理想,所以一些對速度要求較高的模組我們會採用C語言或者C++語言編寫,然後由Python語言呼叫。
本文章講解Windows作業系統下Python呼叫C/C++編寫的動態連結庫檔案(Windows作業系統的動態連結庫檔案的副檔名為dll,Linux作業系統的動態連結庫檔案的副檔名為so,本文章講解的為Windows作業系統,所以本文中以後的動態連結庫檔案均指副檔名為dll檔案的動態連結庫檔案)。
本文章的軟體環境為:Dev-C++ 5.7.1 + Python3.7

下面開始正式講解:
在Dev-C++ 中新建一個工程
點選File >>> New >>> 點選Project
出現一下介面
Dev截圖選中DLL,填入合適的專案名稱,點選“OK”

刪除專案中的"dll.h" 和 "dllmain.cpp"檔案

新建自己需要的檔案並編寫自己的C/C++程式碼。
此處本人舉一個栗子:
新建“DllTest.h” 和 “DllTest.cpp” 檔案(專案名稱為DllTest)
組織結構如下:
在這裡插入圖片描述
在"DllTest.h" 檔案中寫入一下程式碼:
在這裡插入圖片描述
"DllTest.h"中的前5行程式碼利用C語言的巨集定義將__declspec(dllexport) 替換為DLLIMPORT (在編譯階段遇到DLLIMPORT會替換為__declspec(dllexport) ,方便於程式的編寫)
__declspec(dllexport)的作用為將一個函式聲名為匯出函式,就是說這個函式要被其他程式呼叫,即作為DLL的一個對外函式介面
extern “C” 修飾的變數和函式是按照C語言方式編譯和連線的;
第7行宣告有一個名字叫做“hello”的DLL對外介面函式,這個函式是按照C原因方式編譯和連線的,這個函式沒有引數返回資料型別為“char*”。

在"DllTest.cpp"檔案中寫入以下程式碼:
在這裡插入圖片描述
"DllTest.cpp"檔案中第一行程式碼為匯入"DllTest.h"標頭檔案。
第3至6行程式碼對"DllTest.h"標頭檔案中的“hello”函式進行實現。

編寫完成!
點選Dev-C++中的"Compile"按鈕對dll專案進行編譯。
編譯完成後工程專案資料夾中會有一個檔名稱與專案名稱相同的dll檔案,這個檔案就是我們需要的動態連結庫檔案。

編寫Python程式碼如下:
在這裡插入圖片描述本栗子將dll檔案與Python檔案放至同一個資料夾中。
Python程式碼中第6行為變數lib匯入編寫好的dll。
第7行為變數h賦值dll檔案中的hello函式
第8行設定h函式的返回值為C語言中的字串指標型別
第9行列印這個函式的返回值。
注:本栗子中hello方法為無參函式,所以未傳引數,若為有參函式則必須傳遞引數。

執行Python程式碼:
在這裡插入圖片描述
注:本作業系統中安裝了Python2.7 和Python3.7 為Python3.7配置為Python3,讀者需根據自己的配置執行Python命令。

相關文章