Python嵌入C/C++進行開發詳解
如果你想把Python嵌入C/C++中是比較簡單的事情,你需要的是在VC中新增Python的include檔案目錄和lib檔案目錄。下面我們來看下如何把Python嵌入C/C++中。
VC6.0下,開啟 tools->options->directories->show directories for,將Python安裝目錄下的inlude目錄新增到inlude files項中,將libs目錄新增到library files項中。
VC2005下,開啟tools->options->專案和解決方案->VC++目錄,然後做相同工作。
程式碼如下:
在debug下執行出錯,“無法找到python31_d.lib檔案”,後查到原因是:在debug下生成必須要有python31_d.lib檔案,否則只能在release下生成
#include <python.h> int main() { Py_Initialize(); PyRun_SimpleString("Print 'hi,python!'"); Py_Finalize(); return 0; }
Py_Initialize函式原型是:void Py_Initialize()
把Python嵌入C/C++中時必須使用該函式,它初始化Python直譯器,在使用其他的Python/C API之前必須先呼叫該函式。可以使用Py_IsInitialized函式判斷是否初始化成功,成功返回True。
PyRun_SimpleString函式原型是int PyRun_SimpleString(const char *command),用來執行一段Python程式碼。
注意:是否需要維持語句間的縮排呢?
Py_Finalize函式原型是void Py_Finalize(),用於關閉Python直譯器,釋放直譯器所佔用的資源。
PyRun_SimpleFile函式可以用來執行".py"指令碼檔案,函式原型如下:
int PyRun_SimpleFile(FILE *fp,const char *filename);
其 中fp是開啟的檔案指標,filename是要執行的python指令碼檔名。但是由於該函式官方釋出的是由visual studio 2003.NET編譯的,如果使用其他版本的編譯器,FILE定義可能由於版本原因導致崩潰。同時,為簡便起見可以使用如下方式來代替該函式:
PyRun_SimpleString("execfile(‘file.py')"); //使用execfile來執行python檔案
Py_BuildValue()用於對數字和字串進行轉換處理,變成Python中相應的資料型別(在C語言中,所有Python型別都被宣告為PyObject型別),函式原型如下:
PyObject *Py_BuildValue(const char *format,…..);
PyString_String()用於將PyObject*型別的變數轉換成C語言可以處理的char*型,具體原型如下:
char* PyString_String(PyObject *p)。
知識點擴充套件:
Python呼叫C/C++ DLL動態連結庫的方法
首先,在建立一個DLL工程(本例建立環境為VS 2005),標頭檔案:
//hello.h #ifdef EXPORT_HELLO_DLL #define HELLO_API __declspec(dllexport) #else #define HELLO_API __declspec(dllimport) #endif extern "C" { HELLO_API int IntAdd(int,int); }
CPP檔案:
//hello.cpp #define EXPORT_HELLO_DLL #include "hello.h" HELLO_API int IntAdd(int a,int b) { return a + b; }
這裡有兩個注意點:
(1)弄清楚編譯的時候函式的呼叫約定採用的__cdecl還是__stdcall,因為根據DLL中函式呼叫約定方式,Python將使用相應的函式載入DLL。
(2)如果採用C++的工程,那麼匯出的介面需要extern "C",這樣python中才能識別匯出的函式。
到此這篇關於Python嵌入C/C++進行開發詳解的文章就介紹到這了,更多相關Python如何嵌入C/C++進行開發內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!