c++函数:
代码: 全选
#include <python2.6/Python.h>
#include <iostream>
#include "header/callpython.h"
using namespace std;
PyObject* create_para(int data)
{
Py_Initialize();
PyObject *pParm;
pParm=PyTuple_New(1);
PyTuple_SetItem(pParm,0,Py_BuildValue("i",data));
return pParm;
}
PyObject* create_para(int nums,int data[])
{
Py_Initialize();
PyObject *pParm;
pParm=PyTuple_New(nums);
int i=0;
PyTuple_SetItem(pParm,0,Py_BuildValue("i",data[0]));
for(;i<nums;i++)
{
PyTuple_SetItem(pParm,i,Py_BuildValue("i",data[i]));
}
return pParm;
}
PyObject* create_para(PyObject *p)
{
Py_Initialize();
PyObject *pParm;
pParm=PyTuple_New(1);
PyTuple_SetItem(pParm,0,Py_BuildValue("o",p));
return pParm;
}
PyObject* create_para(int nums,char* data[])
{
Py_Initialize();
PyObject *pParm;
pParm=PyTuple_New(nums);
int i=0;
for(;i<nums;i++)
{
PyTuple_SetItem(pParm,i,Py_BuildValue("s",data[i]));
}
return pParm;
}
int runpy(int cnt,char* str[])
{
Py_Initialize();
if(!Py_IsInitialized())
{
cout<<"初始化失败!"<<endl;
return -1;
}
for(int i=0;i<cnt;i++)
PyRun_SimpleString(str[i]);
return 0;
}
int callpy(int flag,char *name,char* funcName,PyObject* para,struct result_py &py_return)
{
PyObject *modelname,*model,*dict,*func,*pRetVal;
Py_Initialize();
if(!Py_IsInitialized())
{
cout<<"初始化失败!"<<endl;
return -1;
}
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./wbAPI')");
PyRun_SimpleString("sys.path.append('./pymodule')");
modelname=PyString_FromString(name);
model=PyImport_Import(modelname);
if(!model)
{
cout<<"找不到模块"<<name<<endl;
return -1;
}
dict=PyModule_GetDict(model);
if(!dict)
{
cout<<"获取字典失败!\n";
return -1;
}
func=PyDict_GetItemString(dict,funcName);
if(!func||!PyCallable_Check(func))
{
cout<<"函数无效"<<endl;
return -1;
}
pRetVal=PyEval_CallObject(func,para);
if(flag==1)
{
PyArg_Parse(pRetVal,"s",py_return.py_str);
}
if(flag==0)
PyArg_Parse(pRetVal,"i",&py_return.py_int);
if(flag==2)
py_return.py_object=pRetVal;
Py_Finalize();
return 0;
}