我正在与C库集成,并且在其中一种方法中,我可以成功获取除缓冲区指针之外的所有数据。
这是方法定义
BOOL NET_DVR_ManualSnap(
LONG lUserID,
LPNET_DVR_MANUALSNAP lpInter, // input parameter
LPNET_DVR_PLATE_RESULT lpOuter // output parameter
);
这是NET_DVR_PLATE_RESULT
结构定义
struct{
DWORD dwSize;
BYTE byResultType;
...
BYTE *pBuffer1;
BYTE *pBuffer2;
} NET_DVR_PLATE_RESULT, *LPNET_DVR_PLATE_RESULT;
在我的python端,pBuffer1和pBuffer2都是由字节指针组成的图像。
class NET_DVR_PLATE_RESULT(ctypes.Structure):
_fields_ = [
("dwSize", ctypes.c_uint),
("byResultType", ctypes.c_byte),
("pBuffer1", ctypes.POINTER(ctypes.c_byte)),
("pBuffer2", ctypes.POINTER(ctypes.c_byte))
]
调用方法时,
lUserID = 0
lib.NET_DVR_ManualSnap.restype = ctypes.c_bool
lpInter = NET_DVR_MANUALSNAP()
lpInter.byLaneNo = 1
lpOuter = NET_DVR_PLATE_RESULT()
success = lib.NET_DVR_ManualSnap(lUserID, ctypes.byref(lpInter), ctypes.byref(lpOuter))
if success:
print(lpOuter.pBuffer1.contents) // NULL pointer access
print(lpOuter.pBuffer2.contents) // NULL pointer access