如何使用Python的指针结构参数包装C函数?

时间:2017-01-12 06:21:08

标签: python c wrapper cython swig

下面是一个简单的C程序square.c,它是复杂程序的简化:

#include <stdio.h>
#include <stdlib.h>

struct Square {
    float length;
    float width;
};

typedef struct Square *sq;

float calc_area(sq a) {
    float s;
    s = a->length * a->width;
    return s;
}

int main() {
    sq a;
    a = malloc(sizeof(struct Square));
    a->length = 10.0;
    a->width = 3.0;

    printf("%f\n", calc_area(a));

    free(a);
}

我想包装calc_area()函数并在Python中调用它。我对CCython不太熟悉,但似乎难点是calc_area()的参数是一个指针结构。

我尝试使用Cython,下面是我的努力:

首先,我写了一个头文件square.h

#include <stdio.h>
#include <stdlib.h>

struct Square {
    float length;
    float width;
};

typedef struct Square *sq;

float calc_area(sq a);

其次,我写了square_wrapper.pyx如下

cdef extern from 'square.h':

    struct Square:
        float length
        float width

    ctypedef struct Square *sq

    float calc_area(sq a)

def c_area(a):
    return calc_area(sq a)

似乎ctypedef struct Square *sq不正确,但我不知道如何修改它 - 这是我第一次尝试包装一个C程序而且我找不到类似的例子。

我如何使用Cython或任何其他工具解决这个问题?提前谢谢!

0 个答案:

没有答案