标签:inter ons 之间 实例 使用 info def object cpp
我们仍然操作如下结构体,
#include <math.h> 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;
『Python CoolBook』C扩展库_其五_C语言层面Python库之间调用API(待续)
标签:inter ons 之间 实例 使用 info def object cpp
原文地址:https://www.cnblogs.com/hellcat/p/9089723.html