class flistStruct(ctypes.Structure):
"""This is repos struct which is used in c code"""
pass
flistStruct._fields_ = [('fname', ctypes.c_char * 257),
('ftime', ctypes.c_char * 257),
('fsize', ctypes.c_double),
('next1',ctypes.POINTER(flistStruct))]
repolistfun.DirRepository.argtypes = [ctypes.c_char_p,ctypes.POINTER(flistStruct)]
repolistfun.DirRepository.restype = ctypes.c_int
def func():
mylist = flistStruct()
ret2 = repolistfun.DirRepository(bytes(arg1, encoding='utf8'),ctypes.byref(mylist))
while mylist != None:
result += "fname:"+str(mylist.fname)
result += "ftime:"+str(mylist.ftime)
result += "fsize:"+str(mylist.fsize)
mylist = mylist.next1对于while循环的第一次迭代,我得到fname、ftime、fsize的值。但是对于第二次迭代,我得到了下面的错误。错误。'LP_flistStruct‘对象没有属性'fname’
发布于 2020-11-03 06:21:42
C中没有递归结构,作为成员,您得到的是指向结构的指针。只需使用
mylist = mylist.next1.contents但是,请注意您的mylist != None是假的。任何类型的类型都不等于None。
相反,您需要将您的循环重构为
while True:
result += "fname:"+str(mylist.fname)
result += "ftime:"+str(mylist.ftime)
result += "fsize:"+str(mylist.fsize)
if not mylist.next1:
break
mylist = mylist.next1.contents最后,一些文体建议:您的变量命名是关闭的- mylist不是一个列表,而是列表中的一个节点/元素。"fsize:"+str(mylist.fsize)似乎很想写,怎么样?
results = []
...
results.append(f"fname:{node.fname} ftime:{node.ftime} fsize:{node.size}")
result = " ".join(results)https://stackoverflow.com/questions/64657497
复制相似问题