1.利用VS創建C++空項目
step1 文件——新建——項目
step2 Visual C++—— Windows桌面——Windows桌面向導
step3 選擇空項目
step4 源文件——新建項——添加
step5 Visual C++——C++文件(.cpp)
2.配置環境
Step1. 更換成Release與X64
Step2. 打開項目屬性:項目——屬性
Step3. 打開自己的虛擬環境,進入include文件夾,并復制此路徑
Step4. C/C++——常規——添加到包含目錄——編輯,將Step3復制的路徑復制進去
Step5. 打開自己的虛擬環境,進入libs文件夾,并復制此路徑
Step6. 鏈接器——常規——附加庫目錄——編輯,并將Step5復制的路徑復制進去
Step7.查看路徑C:\Windows\System32下是否有“python版本號.dll”,比如我的虛擬環境中安裝的是python3.6.13,就看System32下是否有python36.dll,如果沒有就到自己虛擬環境下復制后粘貼到C:\Windows\System32,比如我的虛擬環境的路徑為:C:\software\Anaconda\envs\pytorch,到該路徑下復制python36.dll到C:\Windows\System32.
3.測試
Step1. 寫一個Python函數
在源.cpp同目錄下,建立一個hello.txt,并將下面的代碼復制進去
def add(a,b): print ("These consequences are from Python code.") print ("a = " + str(a)) print ("b = " + str(b)) print ("ret = " + str(a+b)) return a + b
后改后綴為.py,如下圖:
Step2. 復制下面的代碼到自己創建的源.cpp中。注意!!!路徑改為自己的虛擬環境所在的文件夾,另外一定是雙斜杠,否則會報錯:0x00007FF9428A286E (ucrtbase.dll) (Project2.exe 中)處有未經處理的異常: 請求了嚴重的程序退出
#include <Python.h>
#include<iostream>using namespace std;int main()
{//需要進行強制類型轉換//否則報錯“void Py_SetPythonHome(wchar_t *)”: 無法將參數 1 從“const wchar_t [44]”轉換為“wchar_t *” Py_SetPythonHome((wchar_t*)L"C:\\software\\Anaconda\\envs\\pytorch");//Python.exe所在的位置,自己虛擬環境的文件夾下Py_Initialize();//使用python之前,要調用Py_Initialize();這個函數進行初始化if (!Py_IsInitialized()){printf("初始化失敗!");return 0;}else {PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('./')");//這一步很重要,修改Python路徑PyObject * pModule = NULL;//聲明變量PyObject * pFunc = NULL;// 聲明變量pModule = PyImport_ImportModule("hello");//這里是要調用的文件名hello.pyif (pModule == NULL){cout << "沒找到該Python文件" << endl;}else {pFunc = PyObject_GetAttrString(pModule, "add");//這里是要調用的函數名PyObject* args = Py_BuildValue("(ii)", 28, 103);//給python函數參數賦值PyObject* pRet = PyObject_CallObject(pFunc, args);//調用函數int res = 0;PyArg_Parse(pRet, "i", &res);//轉換返回類型cout << "res:" << res << endl;//輸出結果}Py_Finalize();//調用Py_Finalize,這個根Py_Initialize相對應的。}return 0;
}
Step3. 調試——開始調試
Step4. 測試結果
成功!!!
4.補充
1.如果遇到無法查找或打開 PDB 文件的問題,借鑒下面的博客
無法打開PDB文件問題https://blog.csdn.net/qq_41185868/article/details/103206953