在运行我的代码后,我只能访问数组的第一个结构体,它是在外部文件中定义的c函数中定义的。我认为,错误是在这一行:engineLIB.get_files.restype = ctypes.POINTER(file)
,其中只将restype定义为“file”而不是文件数组。我无法找到这个的语法,所以我向你们寻求帮助。提前感谢。这是我的python源代码:
import ctypes
engineLIB = ctypes.CDLL('./engine.so')
class file(ctypes.Structure):
_fields_ = [
("name", ctypes.c_char * 250),
("path", ctypes.c_char * 250),
("fileCnt", ctypes.c_int),
]
engineLIB.get_files.restype = ctypes.POINTER(file)
engineLIB.get_files.argtype = ctypes.c_char_p
path = input("Input path: ")
files = engineLIB.get_files(path.encode("utf-8"))
for i in range(2):
print(files[i].name)
print(files[i].path)
字符串
我尝试将restype定义为在顶部定义的file类的结构体数组
1条答案
按热度按时间62lalag41#
正如我在评论中所说的,看起来像是[SO]: Problems with passing and getting arrays for a C function using ctypes (@CristiFati's answer)的副本(尽管那个是用于 doubles而不是结构,并且还包含(额外的)双指针(*)东西),所以请确保首先阅读它。
我还想强调一下[SO]: C function called from Python via ctypes returns incorrect value (@CristiFati's answer)(你有一个 typo:argtypes)。
我准备了一个例子,我猜你是想。
字符串
型
备注:
输出:
型