分类: Python/Ruby
2014-07-12 21:37:18
篇外话:前一阵子一直没倒出功夫整理、发布博客,趁这两天整理一下,发出来做个记录
本文只讲Python C API,不对Python ctypes进行介绍
由于项目需要,对c语言接口进行了python绑定,采用Python C API方式
接口绑定代码中首先需要引入
把函数声明为可以被Python调用,需要先定义一个方法表,如:
static PyMethodDef XXXMethods[]={
……
{ (char *)”someFunc”, someFunc, METH_VARARGS, NULL},
……
{ NULL, NULL, 0,NULL,}
}
单独使用第三个参数METH_VARARGS,函数会等待Python传来tuple格式的参数,并最终使用PyArg_ParseTuple()进行解析。
方法表必须传递给模块初始化函数。初始化函数的函数命名规则为initname(),其中name为模块名:
void initNAME()
{
Py_InitModule((char *)”NAME”, XXXMethods);
}
Python程序首次导入这个模块时就会调用initNAME()函数,其中调用Py_InitModule()来创建一个对象。
将该文件编译成动态库之后,在python代码中导入该库,即可使用NAME方法。
在C文件中的另一个要素即为类型转换相关的函数,首先对传入参数进行解析,形成C接口的参数,最后将函数返回值转化成PyObject格式之后返回。
题外话:最后不得不吐槽一下CU博客的编辑功能,操作真的不够顺手