本人環境:python
Windows10;app
python3.7.4;函數
visual studio 2019;測試
安裝python,opencv(若是用到的話),以及將兩者目錄添加到vs中的包含目錄和庫目錄就再也不說了。教程一大堆,本身配置好。如下步驟都創建在這些環境配置成功以後。ui
重要:spa
將Python安裝目錄下的include
和libs
文件夾引入到項目中
將libs
目錄下的python37.lib
複製一份爲python37_d.lib
code
1、Python
腳本blog
這個python腳本和C++編譯成功後生成的.exe文件放在同一目錄下。教程
def Hello(): print("Hello") def Add(a,b): return a+b
2、C++調用python腳本接口
#include <Python.h> using namespace std; int main() { Py_Initialize(); //初始化,建立一個Python虛擬環境 if (Py_IsInitialized()) { PyObject* pModule = NULL; PyObject* pFunc = NULL; pModule = PyImport_ImportModule("test_python"); //參數爲Python腳本的文件名 if (pModule) { pFunc = PyObject_GetAttrString(pModule, "Hello"); //獲取函數 PyEval_CallObject(pFunc, NULL); //執行函數 } else { printf("導入Python模塊失敗...\n"); } } else { printf("Python環境初始化失敗...\n"); } Py_Finalize(); }
須要將Python
安裝目錄下的Lib
和Dlls
放到程序運行目錄下,並添加Python37.dll
到運行目錄便可(我是這麼作的)。
運行結果:
ok,成功調用python腳本。
附上C++調用python的一些規範化語句:
#include<Python.h> //添加python的聲明 using namespace std; int main() { Py_Initialize(); //一、初始化python接口 //初始化使用的變量 PyObject* pModule = NULL; PyObject* pFunc = NULL; PyObject* pName = NULL; //二、初始化python系統文件路徑,保證能夠訪問到 .py文件 PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')"); //三、調用python文件名。當前的測試python文件名是test.py。在使用這個函數的時候,只須要寫文件的名稱就能夠了。不用寫後綴。 pModule = PyImport_ImportModule("test"); //四、調用函數 pFunc = PyObject_GetAttrString(pModule, "AdditionFc"); //五、給python傳參數 PyObject* pArgs = PyTuple_New(2);//函數調用的參數傳遞均是以元組的形式打包的,2表示參數個數。若是AdditionFc中只有一個參數時,寫1就能夠了。這裏只先介紹函數必須有參數存在的狀況。 PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 2)); //0:表示序號。第一個參數。 PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 4)); //1:也表示序號。第二個參數。i:表示傳入的參數類型是int類型。 //六、使用C++的python接口調用該函數 PyObject* pReturn = PyEval_CallObject(pFunc, pArgs); //七、接收python計算好的返回值 int nResult; PyArg_Parse(pReturn, "i", &nResult);//i表示轉換成int型變量。在這裏,最須要注意的是:PyArg_Parse的最後一個參數,必須加上「&」符號。 //八、結束python接口初始化 Py_Finalize(); }