首先编写一个python脚本,命名为pytest.py;
1 def add(a,b): 2 print "in python function add" 3 return a+b
c调用python示例:
1 #include<stdio.h> 2 #include<stdlib.h> 3 //#include "C:/Python27/include/python.h" 4 //#pragma comment(lib, "C:\\Python27\\libs\\python27.lib") 5 //若在编译器设置了include和lib路径以上两行可以转化为 6 #include<Python.h> 7 int main(char argc,char **argv) 8 { 9 //初始化Python 10 //在使用Python系统前,必须使用Py_Initialize对其进行初始化。 11 //它会载入Python的内建模块并添加系统路径到模块搜索路径中。 12 PyObject *pName,*pModule,*pDict,*pFunc,*pArgs,*pRetVal; 13 Py_Initialize(); 14 if(!Py_IsInitialized()) 15 { 16 return -1; 17 } 18 //载入名为pytest的脚本,(注意:不是pytest.py) 19 pName = PyString_FromString("pytest"); 20 pModule = PyImport_Import(pName); 21 if(!pModule) 22 { 23 printf("can‘t find pytest.py"); 24 getchar(); 25 return -1; 26 } 27 pDict = PyModule_GetDict(pModule); 28 if(!pDict) 29 { 30 return -1; 31 } 32 //找出函数名为add的函数 33 pFunc = PyDict_GetItemString(pDict,"add"); 34 if(!pFunc || !PyCallable_Check(pFunc)) 35 { 36 printf("can‘t find function [add]"); 37 getchar(); 38 return -1; 39 } 40 //参数进栈 41 pArgs = PyTuple_New(2); 42 //下面的是重点了,从c/c++传参数到Python中时需要用到一个函数,原型为 43 //PyObject* Py_BuildValue(char *format,……) 44 //类似c的printf,但格式不同。常见的格式有 45 //s 字符串 46 //i 整形变量 47 //f 浮点型 48 //o Python对象 49 PyTuple_SetItem(pArgs,0,Py_BuildValue("l",3)); 50 PyTuple_SetItem(pArgs,1,Py_BuildValue("l",4)); 51 //调用Python函数 52 pRetVal = PyObject_CallObject(pFunc,pArgs); 53 printf("function return value: %ld\r\n",PyInt_AsLong(pRetVal)); 54 Py_DECREF(pName); 55 Py_DECREF(pArgs); 56 Py_DECREF(pModule); 57 Py_DECREF(pRetVal); 58 // 关闭Python 59 Py_Finalize(); 60 return 0; 61 }
编译运行出错:
加了include和lib还是链接出错,比如 canno open file "python27.lib",直接在工程->设置->链接上加上python27.lib
原文:http://www.cnblogs.com/premier/p/3653220.html