以下是小可关于c调python的理解有不对之处希望大家指正
测试环境准备
vs2015 x64 release
加载python头文件目录 C:\ProgramData\Anaconda3\pkgs\python-3.7.0-hea74fb7_0\include
加载python库目录 C:\ProgramData\Anaconda3\pkgs\python-3.7.0-hea74fb7_0\libs
链接库 python37.lib
动态库 python37.dll
一 print简单函数测试
测试代码
#include <Python.h>
#include <iostream>
int main()
{
Py_SetPythonHome(L"C:\\ProgramData\\Anaconda3\\");//指定python.exe位置
Py_Initialize();
PyRun_SimpleString("print('hello world!')");
Py_Finalize();
system("pause");
return 0;
}
结果如下
hello world!
请按任意键继续. . .
二 复杂函数测试
准备hello.py文件
def Add(a, b):
c = a + b
return c
def Sub(a, b):
c = a - b
return c
测试代码
#include <Python.h>
#include <iostream>
int main()
{
Py_SetPythonHome(L"C:\\ProgramData\\Anaconda3\\");//指定python.exe位置
//定义变量
PyObject* pName = NULL;
PyObject* pModule = NULL;
PyObject* pDict = NULL;
PyObject* pFunc = NULL;
PyObject* pArgs = NULL;
PyObject* pRet = NULL;
//初始化
Py_Initialize();
int nret = Py_IsInitialized();
if (nret == 0)
{
std::cout << "python init fail\n";
Py_Finalize();
return -1;
}
//设置.py文件所在位置
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
//加载py文件
pModule = PyImport_ImportModule("hello");
if (pModule == NULL)
{
std::cout << "python load hello.py module fail \n";
return -1;
}
//导出py方法
pFunc = PyObject_GetAttrString(pModule, "Sub");
//传入参数数量
pArgs = PyTuple_New(2);
//设置参数
PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 2));
PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 4));
//执行函数
PyObject *pReturn = PyEval_CallObject(pFunc, pArgs);
//获取结果
int nResult = 0;
PyArg_Parse(pReturn, "i", &nResult);
std::cout << "2 + 4 = " << nResult << "\n";
//释放python指针
Py_Finalize();
system("pause");
return 0;
}
结果如下
2 + 4 = -2
请按任意键继续. . .