如何包装一个特定的C代码



我有一个c函数,看起来像这样:

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

我想用Cython包装它,但是我有问题。这是我的python代码:

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(*)[]'但是我不知道这个错误意味着

虽然我不是专家,但乍一看,您似乎在解析指向数组的指针,这是预期的指针数组

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

而另一个命令是:

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

这就是为什么在这个函数中有一个问题,因为类型不同。

建议修复

编辑其中一个函数,使它们匹配。我会说change:

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

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

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


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

相关内容

  • 没有找到相关文章

最新更新