python ctypes传递指向动态分配的结构指针的指针

2024-09-26 18:20:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用python ctypes来传递适当的变量和指向DLL文件中函数的指针。在

下面是DLL文档中提供的函数说明:

Prototype: Picam_GetAvailableDemoCameraModels( const PicamModel** model_array, piint* model_count )

Description: Returns an allocated array of software-simulated camera models in model_array whose number of items is in model_count

Notes: model_array is allocated by picam and must be freed with Picam_DestroyModels.

进一步注意piint被映射到一个整数,model_数组被映射到一个struct。我的python语法如下:

PicamStringSize_SensorName = PicamStringSize_SerialNumber = 64
PicamModel = PicamComputerInterface = ctypes.c_int
pichar = ctypes.c_char
piint = ctypes.c_int

class PicamCameraID(ctypes.Structure):
    _fields_ = [("model", PicamModel),
        ("computer_interface", PicamComputerInterface),
        ("sensor_name", pichar * PicamStringSize_SensorName),
        ("serial_number", pichar * PicamStringSize_SerialNumber)]

然后,我尝试按如下方式调用函数:

^{pr2}$

运行这个之后,我可以读取model_count变量(它告诉我其中有133个项),并且我能够访问model_array的内容,但是内容不正确或是垃圾,例如

model_count
c_long(133)
model_array[5].contents.sensor_name
'@~\xe7\x02'

我想我做了一些错误的事情来处理指针(双指针?)不正确,但我无法确定我偏离了定义的语法。在

在我看来,我的语法是传递一个指针到一个结构的指针,但是我希望结果是结构的一个数组(picamameraid)。如果它只是一个结构,我只能在数组中有一个模型。但是,直到函数运行之后,我才知道数组中有多少个模型。。。我不知道如何(或者说我必须)处理这个问题。在

如有任何见解,我将不胜感激,并请让我知道,如果我可以详细说明任何地方。在

问候


Tags: 函数modelcount语法数组ctypes结构array
1条回答
网友
1楼 · 发布于 2024-09-26 18:20:21

我根据一篇旧帖子回答了自己的问题

getDemos = picam.Picam_GetAvailableDemoCameraModels
getDemos.argtypes = [ctypes.POINTER(ctypes.POINTER(PicamCameraID)) , ctypes.POINTER(piint)]
mem = ctypes.POINTER(PicamCameraID)()
size = ctypes.c_int(0)
getDemos(ctypes.byref(mem), ctypes.byref(size))
print size.value

有关详细信息,请参见Python and ctypes: how to correctly pass "pointer-to-pointer" into DLL?

相关问题 更多 >

    热门问题