从c共享库访问python ctypes结构

时间:2012-02-13 12:51:51

标签: python c ctypes

我编写了一个python代码来将ctypes结构传递给c库函数

python代码:

from ctypes import *

class Info(Structure):
   _field_ = [("input",c_int),
              ("out",c_int)]

info = Info()

info.input = c_int(32)
info.out = c_int(121)

lib = CDLL("./sharedLib.so").getVal
a = lib(byref(info))

c code:

#include <stdio.h>

struct info{
    int input;
    int out;
};

void getVal(struct info *a){
    printf("in = %i \n", a->input);
    printf("out = %i \n", a->out);
}

使用命令编译它: gcc -shared -fPIC -o sharedLib.so sharedLib.c

输出:

in = 0 
out = 0 

我的问题是,为什么输出与我在python代码中设置的值不同。有什么解决方案吗? 我在32位环境中

2 个答案:

答案 0 :(得分:6)

在ctypes结构定义中,您编写了_field_而不是_fields_。因此,这些字段不会转换为它们的C等价物。

答案 1 :(得分:1)

尝试添加:

lib.argtypes = [POINTER(Info)]

在调用lib之前。