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

热点内容
汽车空调压缩机不转了 发布:2025-03-14 12:55:45 浏览:30
安卓和平营地cp怎么组 发布:2025-03-14 12:55:40 浏览:603
时序模式算法 发布:2025-03-14 12:50:45 浏览:203
炉石传说标准模式多脚本 发布:2025-03-14 12:47:53 浏览:210
密码锁用密码打不开是什么原因 发布:2025-03-14 12:31:25 浏览:196
低温存储测试 发布:2025-03-14 12:10:22 浏览:245
c语言二维数组的输出 发布:2025-03-14 11:58:10 浏览:26
安卓脚本自动运行 发布:2025-03-14 11:49:35 浏览:355
yii页面缓存 发布:2025-03-14 11:45:51 浏览:799
c语言算法书 发布:2025-03-14 11:45:26 浏览:265