對於開始,對不起我的英語。在python中定義一個使用C庫函數的結構(dll)
我在Python腳本中使用動態庫(gnu gsl庫)中的函數時遇到了一些麻煩。
事實上,我知道使用一個函數,但我需要定義一個結構白色C類型數據以使用特殊函數。
在第一這是一個C++腳本使用的功能,我將在Python腳本中使用的一個示例:
double fn1 (double x, void * params)
{
return cos(x) + 1.0;
}
int
main (void)
{
gsl_min_fminimizer *s;
double m = 2.0, m_expected = M_PI;
double a = 0.0, b = 6.0;
gsl_function F;
F.function = &fn1;
F.params = 0;
T = gsl_min_fminimizer_brent;
s = gsl_min_fminimizer_alloc (T);
gsl_min_fminimizer_set (s, &F, m, a, b);
...
}
gsl_function的在報頭中的類型定義是:
struct gsl_function_struct
{
double (* function) (double x, void * params);
void * params;
};
typedef struct gsl_function_struct gsl_function ;
#define GSL_FN_EVAL(F,x) (*((F)->function))(x,(F)->params)
我知道使用帶有ctypes的功能:
#Library Call
lib_gsl=CDLL(path_gsl+"gsl.dll")
#Functions Define
gsl_opti_brent=lib_gsl.gsl_min_fminimizer_brent
gsl_opti_alloc=lib_gsl.gsl_min_fminimizer_alloc
gsl_opti_init=lib_gsl.gsl_min_fminimizer_set
T=gsl_opti_brent
T_=pointer(T)
s=gsl_opti_alloc(T_)
在此之前,沒有任何麻煩,但我當想要使用函數gsl_min_fminimizer_set,我需要一個名爲gsl_function的頭文件中定義的特殊類型。
有人知道如何在Python中定義typedef gsl_function以使用名爲function gsl_min_fminimizer_set的dll?
謝謝。 我期待我明確
你看看[PyGSL(http://pygsl.sourceforge.net/)? – 2011-02-11 16:29:50
我不知道這個,我會嘗試 – Johnraikonen 2011-02-11 16:51:49