詳解C++調(diào)用Python腳本中的函數(shù)的實(shí)例代碼
1.環(huán)境配置
安裝完python后,把python的include和lib拷貝到自己的工程目錄下
然后在工程中包括進(jìn)去
2.例子
先寫一個(gè)python的測試腳本,如下
這個(gè)腳本里面定義了兩個(gè)函數(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('./')"); //導(dǎo)入模塊 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配置成傳入兩個(gè)參數(shù)的模式 PyObject* args = PyTuple_New(2); //將Long型數(shù)據(jù)轉(zhuǎn)換成Python可接收的類型 PyObject* arg1 = PyLong_FromLong(4); PyObject* arg2 = PyLong_FromLong(3); //將arg1配置為arg帶入的第一個(gè)參數(shù) PyTuple_SetItem(args, 0, arg1); //將arg1配置為arg帶入的第二個(gè)參數(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++代碼可以引用它。
運(yùn)行結(jié)果:
3.python代碼處理
在發(fā)布軟件的時(shí)候,通常我們都不希望代碼可以直接被別人看到。
以上的Debug目錄中的exe要想能夠單獨(dú)運(yùn)行,必須把python腳本拷過去。為了不讓別人能直接看到我的代碼,我拷過去的是生成的.pyc文件
拷過去之后修改文件名為:
實(shí)現(xiàn)了一個(gè)簡單的python代碼的加密。
不過據(jù)說可以反編譯,但是對我來說已經(jīng)夠了。
總結(jié)
以上所述是小編給大家介紹的詳解C++調(diào)用Python腳本中的函數(shù)的實(shí)例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
C語言?動(dòng)態(tài)內(nèi)存管理全面解析
動(dòng)態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語言中動(dòng)態(tài)內(nèi)存的管理2022-02-02Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置教程詳解
這篇文章主要介紹了Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置,CLion 是 JetBrains 推出的全新的 C/C++ 跨平臺集成開發(fā)環(huán)境,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-08-08MFC程序中使用QT開發(fā)界面的實(shí)現(xiàn)步驟
本文主要介紹了MFC程序中使用QT開發(fā)界面的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12