Я хотел бы использовать следующую функцию 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?
Заранее спасибо за помощь!