溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在C++中調(diào)用python代碼

發(fā)布時(shí)間:2021-12-30 16:06:30 來(lái)源:億速云 閱讀:177 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹了怎么在C++中調(diào)用python代碼,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

    一、環(huán)境設(shè)置

    windows

    VS2015

    python的話用的是acaconda自帶的python環(huán)境,不同版本的acaconda自帶的python不同,我的是python3.6(這一步很重要,如果使用acaconda創(chuàng)建的虛擬環(huán)境的python,可能會(huì)不成功)

    二、VS項(xiàng)目中設(shè)置

    (1)首先在acaconda中找到include文件夾和libs文件夾,如圖所示

    怎么在C++中調(diào)用python代碼

    然后右擊C++項(xiàng)目,選擇屬性,點(diǎn)擊VC++目錄,然后在包含目錄中添加include文件夾,在庫(kù)目錄中添加libs文件夾

    怎么在C++中調(diào)用python代碼

    (2)點(diǎn)擊鏈接器,然后輸入,附加依賴項(xiàng),添加python36_d.lib的路徑

    怎么在C++中調(diào)用python代碼

    因?yàn)榕渲脼镈ebug,所以是添加python36_d.lib,而不是python36.lib。如果沒(méi)有這個(gè)文件,直接復(fù)制python36.lib,然后命名為python36_d.lib即可。如圖所示

    怎么在C++中調(diào)用python代碼

    (3)python代碼

    想要在C++代碼中調(diào)用python中的vsdemo.py的max函數(shù),首先python代碼如圖所示

    def max(a,b):
        if a>b:
            return a
        else:
            return b

    C++代碼如圖所示

    #include <iostream>
    #include<python.h>
    #include"stdio.h"
    using namespace std;
    int main()
    {
    	Py_Initialize();//使用python之前,要調(diào)用Py_Initialize();這個(gè)函數(shù)進(jìn)行初始化
    	if (!Py_IsInitialized())
    	{
    		printf("初始化失??!");
    		return 0;
    	}
    	PyRun_SimpleString("import sys");
    	PyRun_SimpleString("sys.path.append('./')");//這一步很重要,修改Python路徑
    	PyObject* pModule = NULL;//聲明變量
    	PyObject* pFunc = NULL;// 聲明變量
    	pModule = PyImport_ImportModule("vsdemo");//這里是要調(diào)用的文件名vsdemo.py
    	if (pModule == NULL)
    	{
    		cout << "沒(méi)找到" << endl;
    	}
    	pFunc = PyObject_GetAttrString(pModule, "max");//這里是要調(diào)用的函數(shù)名max
    	PyObject* pParams = Py_BuildValue("(ss)", "3", "4");//兩個(gè)字符串參數(shù)
    	char* result;
    	PyObject* pRet = PyObject_CallObject(pFunc, pParams);//調(diào)用函數(shù) pRet是得到的結(jié)果
    	int res = 0;
    	PyArg_Parse(pRet, "s", &result);//轉(zhuǎn)換結(jié)果的返回類型
    	cout << "res:" << result << endl;//輸出結(jié)果
    	system("pause");
    	Py_Finalize();//調(diào)用Py_Finalize,這個(gè)根Py_Initialize相對(duì)應(yīng)的。
    	return 0;
    }

    同時(shí)需要把python代碼,即vsdemo.py文件,放到c++項(xiàng)目文件中,然后再運(yùn)行

    三、可能會(huì)出現(xiàn)的問(wèn)題

    (1)可能會(huì)出現(xiàn)找不到python36.dll的錯(cuò)誤,可以從acaconda中找到該文件,復(fù)制到c++項(xiàng)目文件中即可,如圖所示

    怎么在C++中調(diào)用python代碼

    感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么在C++中調(diào)用python代碼”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI