当前位置:首页 » 编程语言 » 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-01-06 15:06:15 浏览:414
通达信编译 发布:2025-01-06 14:52:26 浏览:777
nltk中文python 发布:2025-01-06 14:25:27 浏览:974
安卓如何格机删掉系统应用 发布:2025-01-06 14:16:29 浏览:530
android异常退出 发布:2025-01-06 14:12:22 浏览:521
vbsql数据库查询 发布:2025-01-06 14:02:59 浏览:329
手机存储空间小会影响数据网络吗 发布:2025-01-06 14:02:52 浏览:313
安卓手机如何把手游变成端游 发布:2025-01-06 14:02:50 浏览:23
星球基地源码 发布:2025-01-06 13:57:58 浏览:190
手机淘宝前面的密码是什么 发布:2025-01-06 13:44:02 浏览:141