1. 程式人生 > >C++呼叫Python例項

C++呼叫Python例項

C++呼叫Python方法基本有以下幾個步驟: 1、下載Python; 2、配置資訊(本次我用的配置是VS2013+Python36),注意Python請下載32位的版本(即使你的作業系統是64位的),否則會函式未定義的錯誤 3、把Python加到VS2013的方法;先建立一個空的Win32控制檯專案,建立main.cpp(具體程式碼下面由貼出),把python3.6的減壓後,將裡面的inlcude和libs兩個資料夾拷貝到。sln的同一級目錄下,然後開啟libs,複製一份python36.lib,並命名為python36_d.lib(這個的原因是inlcude目錄下的pyconfig.h裡面的程式碼在debug下呼叫的是python36_d.lib), 然後右擊進入屬性設定頁 C++->常規->附加包含目錄,輸入 ..\include; 再找到連結器->常規->附加目錄項,輸入 ..\libs; 接著找到連結器->輸入->附加依賴項,新增python36_d.lib;到這裡,配置資訊就OK了; 4、接下來把python3.6的減壓檔案下的python36.dll拷貝到Debug目錄下(與Test.exe同目錄),並在該Debug目錄下新建一個txt檔案,改名為Test001.py(裡面的內容下面將會貼出) 5、接下來就是程式碼部分: main.cpp: #include <iostream>
using namespace std;
extern "C"
{
#include "Python.h"
}
//呼叫輸出"Hello Python"函式
void Hello()
{
 Py_Initialize();//呼叫Py_Initialize()進行初始化
 PyObject * pModule = NULL;
 PyObject * pFunc = NULL;
 pModule = PyImport_ImportModule("Test001");//呼叫的Python檔名
 pFunc = PyObject_GetAttrString(pModule, "Hello");//呼叫的函式名
 PyEval_CallObject(pFunc, NULL);//呼叫函式,NULL表示引數為空
 Py_Finalize();//呼叫Py_Finalize,和Py_Initialize相對應的.
}
//呼叫Add函式,傳兩個int型引數
void Add()
{
 Py_Initialize();
 PyObject * pModule = NULL;
 PyObject * pFunc = NULL;
 pModule = PyImport_ImportModule("Test001");//Test001:Python檔名
 pFunc = PyObject_GetAttrString(pModule, "Add");//Add:Python檔案中的函式名
 //建立引數:
 PyObject *pArgs = PyTuple_New(2);//函式呼叫的引數傳遞均是以元組的形式打包的,2表示引數個數
 PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 6));//0--序號,i表示建立int型變數
 PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 8));//1--序號
 //返回值
 PyObject *pReturn = NULL;
 pReturn = PyEval_CallObject(pFunc, pArgs);//呼叫函式
 //將返回值轉換為int型別
 int result;
 PyArg_Parse(pReturn, "i", &result);//i表示轉換成int型變數
 cout << "6 + 8 = " << result << endl;
 Py_Finalize();
}
int main(int argc, char** argv)
{
 cout << "呼叫Test001.py中的Hello函式..." << endl;
 Hello();
 cout << "\n呼叫Test001.py中的Add函式..." << endl;
 Add();
 getchar();
 return 0;
} 6、Test001.py檔案中內容 def Hello():
    print("Hello Python")
def Add(a, b):
    return a+b
7、這樣簡單的C++呼叫Python的實現就完成了。