Ctypes返回错误的结果

时间:2014-03-13 21:23:36

标签: python c ctypes

尝试使用ctypes包装c函数,例如:

#include<stdio.h>

typedef struct {
    double x;
    double y;
}Number;

double add_numbers(Number *n){
    double x;
    x = n->x+n->y;
    printf("%e \n", x);
    return x;
}

我使用选项

编译c文件
gcc -shared -fPIC -o test.so test.c 

到共享库。

Python代码如下所示:

from ctypes import * 

class Number(Structure):
    _fields_=[("x", c_double),
              ("y", c_double)]

def main():
    lib = cdll.LoadLibrary('./test.so')
    n = Number(10,20)
    print n.x, n.y
    lib.add_numbers.argtypes = [POINTER(Number)]
    lib.add_numbers.restypes = [c_double]

    print lib.add_numbers(n)

if __name__=="__main__":
    main()

add_numbers函数中的printf语句返回预期值3.0e + 1, 但是lib.add_numbers函数的返回值始终为零。 我没有看到错误,任何想法?

1 个答案:

答案 0 :(得分:5)

改变这个:

lib.add_numbers.restypes = [c_double]

到此:

lib.add_numbers.restype = c_double

请注意,它是restype,而不是restypes