我想使用Python中的DLL定义的函数。 从C ++函数(get_version)返回的值是struct
typedef struct myStruct {
size_t size;
char * buff;
} myStruct ;
Python代码是:
lib = CDLL(myDLL.dll)
lib.get_version
问题是如何处理返回的值?
我已经阅读了Voo的回答并阅读其他帖子,但我仍然在努力解决这个问题
我声明了结构类(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
但未显示错误,但restype
的{{1}}未正确设置
在debug中查看变量时:
lib.restype = list:[('size',),('buff',)]
lib.get_version.restype = PyCSimpleType:
任何帮助将不胜感激
答案 0 :(得分:2)
您必须使用ctypes模块。您只需要使用ctypes在python代码中定义结构。
类似的东西:
>>> from ctypes import *
>>> class Foo(Structure):
... _fields_ = [("size", c_size_t), ("buff", c_char_p)]
应该做的伎俩。然后,您只需将restype
方法的get_version
设置为结构,以便解释器知道它返回的内容,然后您可以按预期使用它。