处理从c+返回的结构+;从python调用

处理从c+返回的结构+;从python调用,python,ctypes,Python,Ctypes,我想使用在Python的DLL中定义的函数。 C++函数返回的值(GETX版本)是一个结构< /P> typedef结构myStruct{ 大小; 字符*浅黄色; }我的结构; Python代码是: lib = CDLL(myDLL.dll) lib.get_version 问题是如何处理返回的值 我读过Voo的答案和其他帖子,但我仍在努力解决这个问题 我声明了struct类(Foo,来自Voo的答案),并设置了restype 代码现在看起来 class Foo(Structure):

我想使用在Python的DLL中定义的函数。 C++函数返回的值(GETX版本)是一个结构< /P>
typedef结构myStruct{
大小;
字符*浅黄色;
}我的结构;
Python代码是:

lib = CDLL(myDLL.dll)
lib.get_version
问题是如何处理返回的值

我读过Voo的答案和其他帖子,但我仍在努力解决这个问题

我声明了struct类(Foo,来自Voo的答案),并设置了
restype
代码现在看起来

class Foo(Structure):
    _fields_ = [('size', c_size_t), ('buff', c_char_p)]

lib = CDLL(myDLL.dll)
lib.get_version
lib.get_version.restype = Foo._fields_
我得到以下错误 TypeError:restype必须是类型、可调用类型或无

我了解到这一点,如果我将
restype
设置为非列表,例如:c_char\p,则不会出现错误

当我设置
restype

lib.restype=Foo.fields

错误不会出现,但未正确设置
get\u版本的
restype
在调试中查看变量时:

lib.restype=list:[('size',),('buff',)]

lib.get\u version.restype=PyCSimpleType:

任何帮助都将不胜感激

您必须使用该模块。您只需在python代码中使用ctypes定义结构

比如:

>>> from ctypes import *
>>> class Foo(Structure):
...     _fields_ = [("size", c_size_t), ("buff", c_char_p)]

我们应该做到这一点。然后,您只需将<<代码> ReSType 您的<代码> GETXVIPUTION/CODE>方法,以使解释器知道它返回的内容,然后您可以按预期使用它。

<代码> cType 与C++函数一起工作,因此,如果使用C++,请确保代码< Extn“C”< /COD>函数。你能告诉我dll中函数的返回类型是什么吗?我尝试了MyStRead,但是得到了错误:<代码> C链接函数不能返回C++类的MyStult 谢谢您的帮助,我阅读了其他关于这个问题的帖子,但我仍然在为此而苦苦挣扎。我已经添加了更多关于原版的信息question@user1478497您必须设置方法的
restype
值,而不是整个dll。此外,您不应该将其指向
\u字段
,而是指向结构本身,即
lib.get\u version.restype=Foo
。最后,您可能应该使用比foo更好的名称