Python呼叫C++編寫的方法
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
出現一下介面
選中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命令。
相關文章
- 使用Delphi呼叫C++編寫的DLLC++
- C#呼叫c++編寫的dllC#C++
- C++編寫DLL的方法C++
- java編寫的介面可以呼叫python嗎JavaPython
- 【05】瞭解C++默默編寫並呼叫那些函式C++函式
- Qt中用C++呼叫Python檔案的三種方法QTC++Python
- 利用swig實現python呼叫C/C++的方法PythonC++
- 第四篇:瞭解 C++ 默默編寫並呼叫的函式C++函式
- Python編寫多行Header請求的方法PythonHeader
- 條款05: 瞭解c++默默編寫並呼叫哪些函式C++函式
- 【iOS】category重寫方法的呼叫iOSGo
- C++ hpp檔案的編寫C++
- C++編寫pingIP的程式C++
- python和c++的相互呼叫教程PythonC++
- 5 個用 Python 編寫 web 爬蟲的方法PythonWeb爬蟲
- Python呼叫C/C++方式PythonC++
- C#呼叫python的方法C#Python
- 交叉編譯c++給android呼叫編譯C++Android
- 如何編寫 C++ 遊戲引擎C++遊戲引擎
- C++ 的函式分檔案編寫C++函式
- QT6編寫外部庫並呼叫QT
- Python與C/C++呼叫之ctypesPythonC++
- springboot java呼叫flask python寫的Spring BootJavaFlaskPython
- 編寫你自己的Python模組Python
- 編寫可移植C/C++程式的要點C++
- 【PB】powerbuilder呼叫VC編寫的動態連結庫UI
- 在python中定義[]呼叫的方法Python
- 如何編寫python模組Python
- json的使用(python寫,c++讀)JSONPythonC++
- Windows上Python使用swig呼叫C++WindowsPythonC++
- linux下qt用c++呼叫pythonLinuxQTC++Python
- Java呼叫C/C++編寫的第三方dll動態連結庫(非nativeAPI)—JNIJavaC++API
- java編碼:保證方法呼叫鏈的原子性Java
- 編寫相容 Python 2.x 和 3.x 程式碼的方法Python
- 用Python編寫自己的微型RedisPythonRedis
- C++ 反彙編:關於函式呼叫約定C++函式
- python呼叫私有屬性的方法總結Python
- Java呼叫C/C++編寫的第三方dll動態連結庫(非native API)--- JNIJavaC++API