python 库 c语言,『Python CoolBook』C扩展库_其五_C语言层面Python库之间调用API(待续)(示例代码)...

b65d2228deb8b0eddca726e9116e105e.png

一、C层面模块添加API

我们仍然操作如下结构体,

#include

typedef struct Point {

double x,y;

} Point;

本节目标是封装两个Point结构体的操作函数为sample库的C级API,可以被sample以外的C库调用,首先写出以下函数指针结构体实例,

/* pysample.c */

static PyObject *PyPoint_FromPoint(Point *p, int must_free) {

/* 胶囊和C指针类似。在内部,它们获取一个通用指针和一个名称,可以使用

PyCapsule_New() 函数很容易的被创建。 另外,一个可选的析构函数能被

绑定到胶囊上,用来在胶囊对象被垃圾回收时释放底层的内存*/

return PyCapsule_New(p, "Point", must_free ? del_Point : NULL);

}

/* Utility functions */

static Point *PyPoint_AsPoint(PyObject *obj) {

return (Point *) PyCapsule_GetPointer(obj, "Point");

}

static _PointAPIMethods _point_api = {

PyPoint_AsPoint,

PyPoint_FromPoint

};

结构体定义如下,位于一个新的头函数中

/* pysample.h */

/* Public API Table */

/* 这里最重要的部分是函数指针表 _PointAPIMethods.

它会在导出模块时被初始化,然后导入模块时被查找到。 */

typedef struct {

Point *(*aspoint)(PyObject *);

PyObject *(*frompoint)(Point *, int);

} _PointAPIMethods;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值