当前位置:首页 » 编程语言 » c调用python的函数

c调用python的函数

发布时间: 2024-12-04 04:04:52

㈠ 【python-C相互调用】python里的dict如何作为参数传入.so中的c语言函数

#include<stdio.h>
#include<stdlib.h>
#include<Python.h>

staticPyObject*
wmf_reverse(PyObject*self,PyObject*args,PyObject*kwargs){
staticchar*kwlist[]={"name",NULL};
char*name=NULL;
PyObject*retval=NULL;

//问题1:只取一个字符串,format应该是"s"
//>>>if(PyArg_ParseTupleAndKeywords(args,keyds,"isi",kwlist,&name))
if(PyArg_ParseTupleAndKeywords(args,kwargs,"s",kwlist,&name)){
retval=(PyObject*)Py_BuildValue("i",1);
printf("%s ",name);
//问题2:不要释放
//>>>free(name);
}else{
retval=(PyObject*)Py_BuildValue("i",0);
}
returnretval;
}

staticPyMethodDef
wmf_methods[]={
{"reverse",(PyCFunction)wmf_reverse,METH_VARARGS|METH_KEYWORDS,"reverse"},
//问题3:方法定义表,应该用一条空记录来表示结束。
{NULL,NULL,0,NULL},
};

//问题4:没有定义mole
staticstructPyMoleDef
wmf_mole={
PyMoleDef_HEAD_INIT,
"wmf",/*nameofmole*/
NULL,/*moledocumentation,maybeNULL*/
-1,/*sizeofper-interpreterstateofthemole,
or-.*/
wmf_methods,
};

//问题5:入口函数要声明为:PyMODINIT_FUNC
PyMODINIT_FUNC
PyInit_wmf(void){
//问题6:Py_InitMole要初始化的是模块,不是方法。所以传方法定义是错误的。
//另外,python2.x是用Py_Init_mole,python3.x改用PyMole_Create了。
//两者略有差别,自己注意一下吧。这里我用的是python3.x。
//Py_InitMole("wmf",ExtestMethods);
PyObject*m;
m=PyMole_Create(&wmf_mole);
if(m==NULL){
returnNULL;
}
returnm;
}

热点内容
脚本通行证 发布:2024-12-04 17:51:02 浏览:788
标准鱼缸都什么配置 发布:2024-12-04 17:34:54 浏览:294
电脑外存储器 发布:2024-12-04 17:33:25 浏览:302
验证码破解java 发布:2024-12-04 17:33:23 浏览:907
财富分析师如何配置 发布:2024-12-04 17:33:23 浏览:255
做机械制图需要什么配置电脑 发布:2024-12-04 17:22:40 浏览:291
dsl编译器 发布:2024-12-04 17:20:52 浏览:823
c语言编译系统的功能 发布:2024-12-04 17:20:18 浏览:571
rman数据库恢复数据库 发布:2024-12-04 17:16:00 浏览:21
fpsmeter安卓60怎么用 发布:2024-12-04 17:13:39 浏览:679