C++中調用python函數(VS2017+WIN10+Anaconda虛擬環境)

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

2.如果有問題可在評論區溝通

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10338.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10338.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10338.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

文本提取新技能:學會按行數批量提取,輕松應對各種需求

在數字化時代&#xff0c;文本處理成為我們日常生活和工作中不可或缺的一部分。無論是從網頁、文檔還是數據庫中提取信息&#xff0c;文本提取技能都顯得尤為重要。而按行數批量提取文本內容&#xff0c;更是文本處理中的一項高效且實用的技能。本文將介紹辦公提效工具如何按行…

在Spring Boot應用安裝SSL證書

目錄 前提條件 步驟一&#xff1a;下載SSL證書 步驟二&#xff1a;在Spring Boot安裝SSL證書 步驟三&#xff1a;驗證SSL證書是否安裝成功 前提條件 已通過數字證書管理服務控制臺簽發證書SSL證書綁定的域名已完成DNS解析&#xff0c;即您的域名與主機IP地址相互映射已在W…

ASP.NET學生信息管理系統

摘 要 本文介紹了在ASP.net環境下采用“自上而下地總體規劃&#xff0c;自下而上地應用開發”的策略開發一個管理信息系統的過程。通過分析某一學校學生管理的不足&#xff0c;創建了一套行之有效的計算機管理學生的方案。文章介紹了學生管理信息系統的系統分析部分&#xff0c…

微信投票源碼系統至尊版 吸粉變現功能二合一

源碼簡介 微信投票系統在營銷和社交互動中發揮著多方面的作用&#xff0c;它能夠提升用戶的參與度和品牌曝光度&#xff0c;還是一種有效的數據收集、營銷推廣和民主決策工具。 分享一款微信投票源碼系統至尊版&#xff0c;集吸粉變現功能二合一&#xff0c;全網獨家支持禮物…

已經安裝tensorflow,仍報錯No module named ‘tensorflow‘

在安裝某些python虛擬環境的教程文章中&#xff0c;經常看到有評論區說安裝了但是調用顯示無模塊&#xff0c;例如pytorch和tensorflow等等。 其實跟之前我寫過的一篇文章解決方法類似&#xff0c;就是python項目中需要應用哪個虛擬環境&#xff0c;這個項目的python解釋器就選…

企業網絡需求及適合的解決方案

近年來&#xff0c;企業網絡通信需求可謂五花八門&#xff0c;變幻莫測。它不僅為企業的生產、辦公、研發、銷售提供全面賦能&#xff0c;同時也讓企業業務規模變大成為了可能。 在當前的技術格局下&#xff0c;中大型企業常見的技術方案有很多&#xff0c;而同時也有各自不可替…

商務英語口語成人考級外語培訓之BECkao考級口語篇

在口語考試中&#xff0c;不管實際內容你能說出多少&#xff0c;但準備一些套話&#xff0c;至少還能撐撐場子你們說是不是&#xff1f; 內容闡述 描述事實 1.Im going to describe/present/explain/give you some information about... 2.Id like to say a few words about...…

德國儲能項目鋰電池儲能集裝箱突發火災:安全挑戰再引關注

2024年4月27日&#xff0c;德國尼爾莫爾商業區的一起鋰電池儲能集裝箱火災事件引起了全球關注。這起事故不僅導致兩名消防員在救援過程中受傷&#xff0c;更暴露了儲能系統在安全領域亟待解決的重要問題。 根據德國消防隊的出警記錄&#xff0c;火災發生在晚上9點前不久。消防人…

機器學習算法應用——神經網絡回歸任務、神經網絡分類任務

神經網絡回歸任務&#xff08;4-3&#xff09; 神經網絡回歸任務&#xff0c;通常指的是使用神經網絡模型進行回歸分析。回歸分析是一種統計學方法&#xff0c;用于研究一個或多個自變量&#xff08;預測變量&#xff09;與一個因變量&#xff08;響應變量&#xff09;之間的關…

漲薪技術 —— 搞定Appium工作中常見應用操作!

前言 Appium 是一個開源、跨平臺的自動化測試工具&#xff0c;用于測試原生和輕量移動應用&#xff0c;支持 iOS, Android 和 FirefoxOS 平臺。此工具在測試工作中也較長用到&#xff0c;接下來給大家介紹日常中的操作。 1、應用操作 1.1獲取應用的包名和界面名 當我們從一…

日報表定時任務優化歷程

報表需求背景 報表是一個很常見的需求&#xff0c;在項目中后期往往會需要加多種維度的一些統計信息&#xff0c;今天就來談談上線近10個月后的一次報表優化優化之路&#xff08;從一天報表跑需要五分鐘&#xff0c;優化至秒級&#xff09; 需求&#xff1a;對代理商進行日統計…

基礎I/O:文件系統調用接口

文章目錄 文件系統調用接口open系統調用接口和C語言封裝文件描述符fd重定向 文件系統調用接口 open NAME//打開、創建 - 打開并可能創建文件或設備open, creat - open and possibly create a file or deviceSYNOPSIS#include <sys/types.h>#include <sys/stat.h>…

【C++算法】隊列相關經典算法題

1. N叉樹的層序遍歷 首先我們遇到這個題目&#xff0c;沒有任何思路&#xff0c;我們就可以來模擬一下層序的流程&#xff0c;首先我們肯定是訪問根節點1&#xff0c;訪問之后呢就是訪問下一層的最左節點3&#xff0c;此時第一層的節點1已經訪問過了就可以不要了&#xff0c;然…

[GESP樣題 四級] 填幻方和幸運數

B3940 [GESP樣題 四級] 填幻方 題目 在一個NN 的正方形網格中&#xff0c;每個格子分別填上從 1 到 NN 的正整數&#xff0c;使得正方形中任一行、任一列及對角線的幾個數之和都相等&#xff0c;則這種正方形圖案就稱為“幻方”&#xff08;輸出樣例中展示了一個33 的幻方&am…

ICode國際青少年編程競賽- Python-4級訓練場-嵌套for循環練習

ICode國際青少年編程競賽- Python-4級訓練場-嵌套for循環練習 1、 for i in range(3):Spaceship.step(4)for j in range(4):Dev.step(2)Dev.turnRight()Spaceship.turnLeft()Spaceship.step(4)Spaceship.turnRight()2、 for i in range(4):Spaceship.step(6)for j in range(3):…

Nginx或Tengine服務器配置SSL證書

目錄 前提條件 步驟一&#xff1a;下載SSL證書 步驟二&#xff1a;在Nginx服務器安裝證書 步驟三&#xff1a;驗證SSL證書是否配置成功 前提條件 已通過數字證書管理服務控制臺簽發證書SSL證書綁定的域名已完成DNS解析&#xff0c;即您的域名與主機IP地址相互映射已在Web服…

維修Philips IU22飛利浦四維多普勒彩超診斷儀 V6-2 L12-5 C8-4V深圳捷達工控維修

專為新時代而設計。專為更多而設計。 超聲波在抗擊 COVID-19 中的成像作用不斷擴大&#xff0c;并且對血管和心臟檢查的需求不斷增加&#xff0c;因此比以往任何時候都更有價值。飛利浦的超聲產品組合&#xff08;包括 EPIQ Elite&#xff09;為一線護理人員提供了寶貴的診斷支…

Intel處理器7z/XZ遇到 The failure in hardware

最近在使用Intel 12700H混合架構處理器的時候&#xff0c;一旦使用7z或者XZ算法壓縮東西就會出現如下的報錯&#xff1a; Internal Error: The failure in hardware (RAM or CPU), OS or program在檢查排除了內存、磁盤和OS的問題后&#xff0c;最終確定為Intel CPU的問題&…

Lazada、Shopee測評自養號,快速出單技巧全解析!

每個人都憧憬著自己的店鋪能夠擁有一款或多款引人注目的熱銷商品&#xff0c;這些商品不僅能為店鋪帶來可觀的收益&#xff0c;更重要的是它們能夠成為吸引顧客的強大磁石&#xff0c;顯著提升店鋪的整體流量。一旦這樣的爆款商品成功吸引顧客&#xff0c;其他產品也將隨之受到…

C++11:并發新紀元 —— 深入理解異步編程的力量(1)

hello &#xff01;大家好呀&#xff01; 歡迎大家來到我的Linux高性能服務器編程系列之《C11&#xff1a;并發新紀元 —— 深入理解異步編程的力量》&#xff0c;在這篇文章中&#xff0c;你將會學習到C新特性以及異步編程的好處&#xff0c;以及其如何帶來的高性能的魅力&…