用 ctypes, 接收返回的对象建个类, 类似下面这种:
class st(Structure):
_fields_=[('a', c_int), ('b', c_int)]
so = CDLL('./liba.so')
s = st()
s.a=1
s.b=2
11 ret = so.callfun(s)
12 sret = st(ret)
print sret.a, sret.b
请问是像11 与12行这样操作吗,可输出的是1 ,0。应该是1,2才对
你是要返回啊,你这里做的是传值过去啊,还有名称 'a' 和 'b' 应该和c源码里的一样
c:
struct beer_recipe
{
int author;
int title;
};
python:
class beer_recipe(Structure):
_fields_ = [
("author",c_int),
("title",c_int),
]
或者
11 ret = so.callfun(s)
后 试试看
print ret.a, ret.b
另外随便说一点,跨语言操作,尽量别返回复杂类型了,最好都是字符串或者字符串指针,返回后处理起来也方便
traceback:
File "test.py", line 13, in
print ret.a, ret.b
AttributeError: 'int' object has no attribute 'a'
我C里面写的和你的说法一样,我print ret.a, ret.b
后,traceback如上,python 认为返回的是一个INT,奇怪了