我用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之间的必要连接。我已经搜索了很多答案,但没有运气。请帮忙。
答案 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)