C++嵌入python脚本混合编程

C++嵌入python脚本混合编程

/-------------------------------------
1.添加路径安装python3.7到默认路径
2.安装VS2017 express 4.7 03190简体中文
3.在项目->属性->常规里,配置<附加包含目录>,添加:
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\include
4.在项目->属性->链接器->输入->系统依赖项里,添加:
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\libs\python37_d.lib
在此目录下查找python37.lib并复制个副本改名为python37_d.lib
-------------------------------------
/
//如果你的python是X64的,这里的程序一定也得是X64的
#include
#include “Python.h”

1.在C++里执行python3的语句
//int main()
//{
// Py_Initialize();
// PyRun_SimpleString(“print(‘hello world!’)”);
// Py_Finalize();
// getchar();
// return 0;
//}

2.在C++中执行python3脚本文件
//int main(int argc, char *argv[])
//{
// Py_Initialize();
//
// FILE *fp = _Py_fopen(“test.py”, “r+”); //必须用这个函数打开脚本文件,否则最后会报错
//
// if (fp == NULL)
// {
// return 1;
// }
//
// PyRun_SimpleFile(fp, “test.py”);
//
// Py_Finalize();
// _sleep(1000);
// return 0;
//}

//3.C++调用其它python3文件里的函数
int main(int argc, char *argv[])
{
Py_Initialize(); //初始化python运行环境
PyRun_SimpleString(“import sys”); //引入指定库
PyRun_SimpleString(“sys.path.append(’./’)”); //指定脚本所在的目录(这里为当目录)

PyObject * pModule = NULL; //初始化3个变量
PyObject * pFunc = NULL;
PyObject *pName = NULL;

pModule = PyImport_ImportModule("func2"); //把脚本装入内存
pFunc = PyObject_GetAttrString(pModule, "Add");//取出脚本里的函数

//装配参数
PyObject *pArgs = PyTuple_New(2); //这里的2代表有两个参数
PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 2)); //0代表第一个参数,i代表整型,2是实际的值
PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 3)); //1代表第二个参数,i代表整型,3是实际的值

PyObject *pReturn = PyEval_CallObject(pFunc, pArgs);//带参数调用指函数并接受返回值
int  nResult;
PyArg_Parse(pReturn, "i", &nResult);//按指定类型解析出函数的返回值(i表示转换成int型变量)
std::cout << nResult << std::endl;
Py_Finalize();
system("pause");

return 0;

}

Fun2.py内容

def Add(a , b):
c = a + b
return c

def Sub(a , b):
c = a - b
return c

Test.py的内容:
print(“wahaha”)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值