2011-08-17 45 views
1

我有一個C函數,看起來像這樣:我想用用Cython把它包起來包裹的C代碼用Cython,有問題

int parse_commandline_options1 (cl1_option_t co[], char ***res, 
           char ***last_vals, int argc, char *argv[]); 

,但我有問題。這是我用Cython代碼:

cdef extern from "pclo1.h": 
    ctypedef struct cl1_option_t: 
     pass 

    int parse_commandline_options1(cl1_option_t, char***, char***, int, char[]*) 


cdef class Options: 

    cdef readonly cl1_option_t clo 

    cdef cl1_option_t Get(self): 
     return self.clo 

    property short_name: 
     def __get__(self): 
      return self.clo.short_name 

    property long_name: 
     def __get__(self): 
      return self.clo.long_name 

def ParseCommandLine(char ***a, char ***b, char *c[]): 
    o = Options() 
    parse_commandline_options1(o.Get(), a, b, 0, c) 
    return o         #^error here 

用Cython告訴我,Cannot assign type 'char **' to 'char(*)[]'但我不知道這個錯誤表示。你能告訴我我做錯了什麼嗎?我對C沒有太多經驗,很不幸.. 謝謝!

回答

1

雖然我不是專家,乍一看它看起來像你解析指向數組的指針,那就是期待指針數組

int parse_commandline_options1(cl1_option_t, char***, char***, int, char[]*) 

而另一個命令是:

def ParseCommandLine(char ***a, char ***b, char *c[]) 

這就是爲什麼該功能存在問題,因爲類型不同。

修復建議

編輯的功能之一,使它們匹配。我要說的變化:

int parse_commandline_options1(cl1_option_t, char***, char***, int, char[]*) 

int parse_commandline_options1(cl1_option_t, char***, char***, int, char* []) 

這應該解決您的眼前問題,但你將需要更新的功能,如果它確實希望指針數組(如果我的代碼的解釋是正確的)。


希望這會有所幫助,我相信更聰明的人會評論真正的原因! :)