c++调用python
寻梦人 • 2018 年 08 月 17 日
Loading...
https://docs.python.org/3.6/c-api/arg.html#c.Py_BuildValue
#pragma comment(lib, "python36_d.lib")
#include
#include
void python003()
{
//开启虚拟机
Py_Initialize();
PyRun_SimpleString("import Hello"); //引入自己的python文件
//导入模块
PyObject* pModule = PyImport_ImportModule("Hello");
if (!pModule)
{
cout << "没有获取到Python模块." << endl;
return;
}
//获取Hello模块内abc函数
PyObject* pv = PyObject_GetAttrString(pModule, "abc");
if (!pv || !PyCallable_Check(pv))
{
cout << "没有发现abc这个函数" << endl;
return;
}
//初始化要传入的参数,args配置成传入两个参数的模式
// PyObject* args = PyTuple_New(2);
PyObject* args = PyTuple_New(1);
//将Long型数据转换成Python可接收的类型
PyObject* arg1 = PyLong_FromLong(4);
// 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)
{
//将返回值转换成long型
long result = PyLong_AsLong(pRet);
cout << "result:" << result << endl;
}
//关闭虚拟机
Py_Finalize();
}
见附件
[pthon001.rar][1]
[1]: https://www.xunmengren.net/usr/uploads/2018/08/2791534453.rar