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

如题:谢谢?... 如题:谢谢? 展开
 我来答
丽江海月客栈
2013-11-28 · TA获得超过581个赞
知道小有建树答主
回答量:383
采纳率:100%
帮助的人:174万
展开全部

用 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

另外随便说一点,跨语言操作,尽量别返回复杂类型了,最好都是字符串或者字符串指针,返回后处理起来也方便
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式