我创建了一个C-library,其中包含许多可以使用ctypes从python调用的函数。我有一些比较简单的方法,但是对于如何将正确的参数传递给以下函数,我感到困惑:
foo(double *, double *, void(*f1)(double *, double *, double, struct sys *),
void(*f2)(double *, double *, double, struct sys *), struct sys *, double *,
double, double, int, int, gsl_rng *)
我的出发点是为函数设置.argtypes
。我用POINTER(100*c_double)
等对双数组进行排序
但是,我被困在如何传递函数指针上。我有许多函数(f1和f2的形式),它们与foo
位于同一个库中,我想将它们作为参数传递给foo
。在
我想我已经通过使用以下代码成功地传递了结构sys*指针:
^{pr2}$然后使用POINTER(sys)
作为argtype
。最后,gsl_rng
是来自GNU科学图书馆的一个典型的随机数生成器;我不知道从哪里开始。在
有谁能对复杂的ctypes有所了解吗?在
ctypes中类似这样的函数指针类型似乎介于不存在和未记录之间,但您仍然可以使用它们。关键是根本不定义argtypes。在
从ctypes documentation:
因此,只要不指定argtypes,我们就应该能够在其中插入指针并希望达到最佳效果,而这种方法实际上是有效的。下面是一个简单的工作示例:
f.c.:
f.py公司:
^{pr2}$输出:
当然,如果您真的希望在指定argtypes时进行类型检查,那么这对您没有帮助。我不知道有什么方法能吃到那个蛋糕。在
相关问题 更多 >
编程相关推荐