python调用C++,C++函数返回一个结构体变量给PYTHON,python如何接收呢?

如题:谢谢?

用 ctypes, 接收返回的对象建个类, 类似下面这种:


from ctypes import *
class StandGo(Structure):
    _fields_ = [("x", c_int),("y", c_int)]
    
 接收对象赋值给这个类应该就可以了
 具体的看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,奇怪了

温馨提示:答案为网友推荐,仅供参考
相似回答