我想使用在Python的DLL中定义的函数。
从C++函数返回的值(GETX版本)是一个结构

typedef struct myStruct {
    size_t size;
    char * buff;
} 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_

我得到以下错误
类型错误:restype必须是类型、可调用或无
我读到了这个,如果我将restype设置为not as a list,例如:c_char_p,则不会出现错误
当我设置restype
lib.restype=Foo.fields
未出现错误,但未正确设置restypeget_version
在调试中查看变量时:
lib.restype=列表:[('size',),('buff',)]
lib.get_version.restype=PyCSimpleType:
任何帮助都将不胜感激

最佳答案

您必须使用ctypes模块。您只需在python代码中用ctypes定义结构即可。
类似于:

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

应该会成功的。然后将restype方法的get_version设置为结构,这样解释器就知道它返回了什么,然后就可以按预期使用它了。

关于python - 处理从python调用的c++返回的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11181238/

10-10 18:03