Python Ctypes NULL指针访问

时间:2019-07-17 03:17:45

标签: python c ctypes

我正在与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

0 个答案:

没有答案