当前位置:首页 » 编程语言 » 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;
}

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:563
制作脚本网站 发布:2025-10-20 08:17:34 浏览:852
python中的init方法 发布:2025-10-20 08:17:33 浏览:552
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:731
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:653
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:971
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:225
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:84
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:774
python股票数据获取 发布:2025-10-20 07:39:44 浏览:680