DLL возвращает объект при вызове функции с использованием ctypes в python.
Возвращает следующее - скажем, он назван ReturnO;print (ReturnO) дает следующее:
(63484, <DLLname.ClassName object at 0x09D35670>)
Объект должен возвращать параметры;их имена: Paramater_1, Parameter_2 и так далее.У меня вопрос, как мне получить доступ к значениям в Parameter_1, Parameter_2 и т. Д.
, если я делаю печать следующим образом
print(ClassName.Parameter_1)
print(ClassName.Parameter_2)
Я получаю следующее
Field type=c_float_Array_5, ofs=49483, size=20
Field type=c_float_Array_5, ofs=49503, size=20
Теперь, как мне получить значение в этом массиве.dotValue (.value) не работает.
Благодарим вас за помощь.Спасибо.
---------------- ДОБАВЛЕНО / ИЗМЕНЕНО ---------- НИЖЕ ------------
ниже код;ценим вашу помощь:
num1=10.1234
int1=10
num11=1.1111
str1=”abcd”
ret=GetOutput_Main(int1,num1,num11,str1)
class ClassName(ctypes.Structure):
_pack_ = 1
_fields_ = [("parameter_1", ctypes.c_float * 5),
("parameter_2", ctypes.c_float * 5)]
def GetOutput_Main (int2,num2,num22,str2):
lib = ctypes.WinDLL("mydllname.dll")
prototype = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ClassName))
paramflags = (1, "int2",), (1, "num2",), (2, "num22",), (2, "str2",),
Getoutput_Sub = prototype(("Getoutput", lib), paramflags))
ret = Getoutput_Sub(int2,num2)
print(ret) #gives the details of the object
print(str2.parameter_1) #gives the details of array
печать (в отставку) дает мне:
(63484, <mydllname.ClassName object at 0x09D35670>)
если я делаю печать (str2), я получаю следующее:
<class 'mydllname.ClassName'>
и print (str2.parameter_1) дает мне
Field type=c_float_Array_5, ofs=49483, size=20
я ищу способы распаковать объект, спасибо.
если я это сделаю, где num22 - размер
UnpackedST = struct.unpack(str2,num22)
я получаю следующую ошибку
Struct() argument 1 must be a str or bytes object, not _ctypes.PyCStructType