经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C++调用Python脚本中的函数
来源:cnblogs  作者:Sanrice3  时间:2018/11/16 10:26:35  对本文有异议

1.环境配置

安装完python后,把python的include和lib拷贝到自己的工程目录下

image

然后在工程中包括进去

imageimage

 

2.例子

先写一个python的测试脚本,如下

image

这个脚本里面定义了两个函数Hello()和_add()。我的脚本的文件名叫mytest.py

C++代码:

  1. #include "stdafx.h"  #include <stdlib.h>#include <iostream>  #include "include\Python.h"using namespace std;int _tmain(int argc, _TCHAR* argv[])
  2. {//初始化Python环境      Py_Initialize();
  3.  
  4.     PyRun_SimpleString("import sys");//添加Insert模块路径  //PyRun_SimpleString(chdir_cmd.c_str());PyRun_SimpleString("sys.path.append('./')");//导入模块  PyObject* pModule = PyImport_ImportModule("mytest");if (!pModule)
  5.     {
  6.         cout << "Python get module failed." << endl;return 0;
  7.     }
  8.  
  9.     cout << "Python get module succeed." << endl;
  10.  
  11.     PyObject * pFunc = NULL;
  12.     pFunc = PyObject_GetAttrString(pModule, "Hello");
  13.     PyEval_CallObject(pFunc, NULL);//获取Insert模块内_add函数  PyObject* pv = PyObject_GetAttrString(pModule, "_add");if (!pv || !PyCallable_Check(pv))
  14.     {
  15.         cout << "Can't find funftion (_add)" << endl;return 0;
  16.     }
  17.     cout << "Get function (_add) succeed." << endl;//初始化要传入的参数,args配置成传入两个参数的模式  PyObject* args = PyTuple_New(2);//将Long型数据转换成Python可接收的类型  PyObject* arg1 = PyLong_FromLong(4);
  18.     PyObject* arg2 = PyLong_FromLong(3);//将arg1配置为arg带入的第一个参数  PyTuple_SetItem(args, 0, arg1);//将arg1配置为arg带入的第二个参数  PyTuple_SetItem(args, 1, arg2);//传入参数调用函数,并获取返回值  PyObject* pRet = PyObject_CallObject(pv, args);if (pRet)
  19.     {//将返回值转换成long型  long result = PyLong_AsLong(pRet);
  20.         cout << "result:" << result << endl ;
  21.     }
  22.  
  23.     Py_Finalize();
  24.  
  25.     system("pause");return 0;
  26. }

注意脚本放的位置,确保C++代码可以引用它。

运行结果:

image

 

3.python代码处理

在发布软件的时候,通常我们都不希望代码可以直接被别人看到。

以上的Debug目录中的exe要想能够单独运行,必须把python脚本拷过去。为了不让别人能直接看到我的代码,我拷过去的是生成的.pyc文件

image

拷过去之后修改文件名为:

image

实现了一个简单的python代码的加密。

不过据说可以反编译,但是对我来说已经够了。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号