詳解C++調(diào)用Python腳本中的函數(shù)的實例代碼
1.環(huán)境配置
安裝完python后,把python的include和lib拷貝到自己的工程目錄下

然后在工程中包括進去


2.例子
先寫一個python的測試腳本,如下

這個腳本里面定義了兩個函數(shù)Hello()和_add()。我的腳本的文件名叫mytest.py
C++代碼:
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include "include\Python.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//初始化Python環(huán)境
Py_Initialize();
PyRun_SimpleString("import sys");
//添加Insert模塊路徑
//PyRun_SimpleString(chdir_cmd.c_str());
PyRun_SimpleString("sys.path.append('./')");
//導入模塊
PyObject* pModule = PyImport_ImportModule("mytest");
if (!pModule)
{
cout << "Python get module failed." << endl;
return 0;
}
cout << "Python get module succeed." << endl;
PyObject * pFunc = NULL;
pFunc = PyObject_GetAttrString(pModule, "Hello");
PyEval_CallObject(pFunc, NULL);
//獲取Insert模塊內(nèi)_add函數(shù)
PyObject* pv = PyObject_GetAttrString(pModule, "_add");
if (!pv || !PyCallable_Check(pv))
{
cout << "Can't find funftion (_add)" << endl;
return 0;
}
cout << "Get function (_add) succeed." << endl;
//初始化要傳入的參數(shù),args配置成傳入兩個參數(shù)的模式
PyObject* args = PyTuple_New(2);
//將Long型數(shù)據(jù)轉(zhuǎn)換成Python可接收的類型
PyObject* arg1 = PyLong_FromLong(4);
PyObject* arg2 = PyLong_FromLong(3);
//將arg1配置為arg帶入的第一個參數(shù)
PyTuple_SetItem(args, 0, arg1);
//將arg1配置為arg帶入的第二個參數(shù)
PyTuple_SetItem(args, 1, arg2);
//傳入?yún)?shù)調(diào)用函數(shù),并獲取返回值
PyObject* pRet = PyObject_CallObject(pv, args);
if (pRet)
{
//將返回值轉(zhuǎn)換成long型
long result = PyLong_AsLong(pRet);
cout << "result:" << result << endl ;
}
Py_Finalize();
system("pause");
return 0;
}
注意腳本放的位置,確保C++代碼可以引用它。
運行結(jié)果:

3.python代碼處理
在發(fā)布軟件的時候,通常我們都不希望代碼可以直接被別人看到。
以上的Debug目錄中的exe要想能夠單獨運行,必須把python腳本拷過去。為了不讓別人能直接看到我的代碼,我拷過去的是生成的.pyc文件

拷過去之后修改文件名為:

實現(xiàn)了一個簡單的python代碼的加密。
不過據(jù)說可以反編譯,但是對我來說已經(jīng)夠了。
總結(jié)
以上所述是小編給大家介紹的詳解C++調(diào)用Python腳本中的函數(shù)的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
C語言調(diào)用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查
SQLite是一種輕量級的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),是一個開源的、零配置的、服務器端的、自包含的、零管理的、事務性的SQL數(shù)據(jù)庫引擎,本文主要介紹了如何調(diào)用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查,需要的可以參考一下2023-08-08
Visual C++中Tab View的多種實現(xiàn)方法
這篇文章主要介紹了Visual C++中Tab View的多種實現(xiàn)方法,包括了CTabCtrl控件、CSheetCtrl標簽選擇窗口以及靜態(tài)分割窗口等實現(xiàn)Tab View的方法,需要的朋友可以參考下2014-10-10
Qt(C++)調(diào)用工業(yè)相機Basler的SDK使用示例
這篇文章主要介紹了Qt(C++)調(diào)用工業(yè)相機Basler的SDK使用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03

