从Python中访问Cthon包装的C代码中的C代码

时间:2015-12-22 05:08:01

标签: cython

我用Cython成功地包装了C库的一些api函数。我现在想公开一些在库中使用的全局C数组,但是我很难搞清楚如何去做。

数组指针初始化并在epanet.c中分配:

void initpointers()
{
    H = NULL;
}

int  allocdata()
{
    n = MaxNodes + 1; 
    H = (double *) calloc(n, sizeof(double));
}

它在头文件(vars.h)中是全局的:

extern double   *H;

我可以通过执行以下操作来访问C代码中数组中的值:

for (i=1; i<=Nnodes; i++)
{
    H[i] = some_value;
}

我想在pyepanet.pyx文件中编写一个函数,如:

def printH(int Nnodes, double *H):
    for i in range(1, Nnodes+1):
        print H[i]

但是,我错过了C和cython / python之间的必要连接。我已经搜索了很多答案,但没有运气。请帮忙。

1 个答案:

答案 0 :(得分:0)

我终于找到了有用的东西。似乎我可以在不引用头文件的情况下声明指针。当我之前尝试引用头文件时,我认为由于重新定义项目而导致错误。以下是我的.pyx文件中的代码:

cdef:
    extern double *H
    extern int Nnodes

def printH():
    cdef int i
    for i in range(1,Nnodes+1):
        print round(H[i], 2)