以下是小可关于c调python的理解有不对之处希望大家指正
测试环境准备
vs2015 x64 release
加载python头文件目录 C:ProgramDataAnaconda3pkgspython-3.7.0-hea74fb7_0include
加载python库目录 C:ProgramDataAnaconda3pkgspython-3.7.0-hea74fb7_0libs
链接库 python37.lib
动态库 python37.dll
测试代码
#include#include 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#include 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 failn"; 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 请按任意键继续. . .



