Как использовать функцию, включающую указатели, написанные на C ++ через интерфейс python (в основном с использованием ctypes) - PullRequest
0 голосов
/ 10 марта 2020

Я хотел бы использовать следующую функцию C ++, для которой у меня есть соответствующий файл .dll. Функция в файле .h:

SDK_API BUFUSB_InstallFrameHooker(int FrameType, FrameDataCallBack Framehooker);

, где 'FrameDataCallBack' определяется с помощью:

typedef void (*FrameDataCallBack)( TProcessedDataProperty* Attributes, unsigned char *BytePtr);

Мой код для решения этой проблемы был следующим:

class TProcessedDataProperty(Structure):
    _fields_ = [('CameraID',c_int),
                ('Row',c_int),
                ('Column',c_int),
                ('Bin',c_int),
                ('Xstart',c_int),
                ('Ystart',c_int),
                ('ExposureTime',c_int),
                ('RedGain',c_int),
                ('GreenGain',c_int),
                ('TimeStamp',c_int),
                ('TriggerOccurred',c_int),
                ('TriggerEventCount',c_int),
                ('ProcessFrameType',c_int),
                ('FilterAcceptForFile',c_int)]

FrameType=c_int(1)
pict=c_ubyte
FrameDataCallBack=CFUNCTYPE(None,POINTER(TProcessedDataProperty),POINTER(pict))

get_pict=_dll.BUFUSB_InstallFrameHooker
get_pict.argtypes = [c_int,POINTER(FrameDataCallBack)]
get_pict.restype = c_int

callback=FrameDataCallBack()

get_pict(FrameType,callback)

В последней строке должны быть указаны детали выходного изображения (в данном случае растрового изображения) с пиктом, содержащим сетку в формате BGR массива пикселей. Однако, что бы я ни пытался, я не могу получить выходные данные этих двух указателей и отобразить их с помощью эквивалентной функции numpy. Функция возвращает значение «1», указывающее на успешность, но каждый из этих «pict» и «TProcccessedDataProperty» отображается пустым. Есть что-то тривиальное, что мне не хватает в .dll и использовании ctypes / pointers?

Заранее спасибо за помощь!

...