我编写了一个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位环境中
答案 0 :(得分:6)
在ctypes结构定义中,您编写了_field_
而不是_fields_
。因此,这些字段不会转换为它们的C等价物。
答案 1 :(得分:1)
尝试添加:
lib.argtypes = [POINTER(Info)]
在调用lib之前。