码迷,mamicode.com
首页 > 编程语言 > 详细

『Python CoolBook』C扩展库_其五_C语言层面Python库之间调用API(待续)

时间:2018-05-25 19:22:20      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:inter   ons   之间   实例   使用   info   def   object   cpp   

技术分享图片

一、C层面模块添加API

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

#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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!