我想使用在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
未出现错误,但未正确设置
restype
的get_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/