如何包装特定的代码?

时间:2011-08-17 21:43:43

标签: c cython

我有一个看起来像这样的C函数:

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

我想用Cython包装它,但我遇到了问题。这是我的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(*)[]',但我不知道这个错误意味着

1 个答案:

答案 0 :(得分: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* [])

这应该可以解决您的直接问题,但如果它确实需要一个指针数组(如果我对代码的解释是正确的话),则需要更新该函数。


希望这会有所帮助,我相信更聪明的人会评论真正的原因! :)