我在用python呼叫sdk中的會回呼函式,現在出現,回呼函式注冊進去后,回呼函式沒有運行。有做過同為相機二次開發的朋友能幫忙看一下我的代碼哪里出問題了。
c中源代碼是這樣寫的:
NET_SDK_SetSubscribCallBack(SubscribCallBack, this);
void CALLBACK CSDKDEMODlg::SubscribCallBack(LONG lUserID, DWORD dwCommand, char *pBuf, DWORD dwBufLen, void *pUser)
{
switch(dwCommand)
{
//IVE_VFD_RESULT_HEAD_T+[IVE_VFD_RESULT_DATA_INFO_T+源資料]+[IVE_VFD_RESULT_FACE_DATA_INFO_T+人臉資料+人臉特征值]+...+[IVE_VFD_RESULT_FACE_DATA_INFO_T+人臉資料+人臉特征值]
case NET_SDK_N9000_ALARM_TYPE_VFD:
{
TRACE("NET_DVR_SMART_VFD dwBufLen=%d\n", dwBufLen);
if (dwBufLen < sizeof(NET_DVR_IVE_VFD_RESULT_HEAD_T))
{
break;
}
char* tmp = pBuf;
// 決議頭
NET_DVR_IVE_VFD_RESULT_HEAD_T* head = (NET_DVR_IVE_VFD_RESULT_HEAD_T*)tmp;
tmp += sizeof(NET_DVR_IVE_VFD_RESULT_HEAD_T);
// 決議原始資料
NET_DVR_IVE_VFD_RESULT_DATA_INFO_T* src = (NET_DVR_IVE_VFD_RESULT_DATA_INFO_T*)tmp;
tmp += sizeof(NET_DVR_IVE_VFD_RESULT_DATA_INFO_T);
if(src->dataLen > 0)
{
TRACE("src->dataLen=%d, src->width=%d, src->height=%d \n", src->dataLen, src->width, src->height);
//源資料
char* img = new char[src->dataLen];
memcpy(img, tmp, src->dataLen);
delete img;
tmp += src->dataLen;
}
我的python回呼是這樣呼叫的:
from TWfunc.Ai_alarm import net_SDK_SetSubscribCallBack
from TWfunc.SubscribCallBack import *
from TWfunc.Toolfunc.Errordict import errorinfo
import time
pBuf = POINTER(CHAR)
pUser = POINTER(c_void_p)
SUBSCRIBE_CALLBACK = WINFUNCTYPE(None,LONG,c_ulong,pBuf,c_ulong,pUser)
def _callback(lUserID,dwCommand,pBuf,dwBufLen,pUser):
# lUserID,
TWdll.printf("測驗")
# obj = para.__getitem__(0)
# print(obj)
print("回呼測驗")
# print(lUserID,dwCommand,pBuf.value,dwBufLen,pUser)
# print(dwCommand)
CALL_BACK_FUN = SUBSCRIBE_CALLBACK(_callback)
if __name__ == "__main__":
# p = Pool(3)
cam = TWCamera()
pUser = POINTER(c_void_p)()
print(type(CALL_BACK_FUN))
ret = cam.net_SDK_SetSubscribCallBack(CALL_BACK_FUN,pUser)
time.sleep(10)
print(ret)
if ret:
print("回呼成功")
sys.exit()
上邊是呼叫的回呼,下邊是注冊回呼介面:
class TWCamera():
def __init__(self):
# self.lUserID =
self._handle = c_void_p()
self.handle = pointer(self._handle)
def net_SDK_SetSubscribCallBack(self,CallBackFun, pUser):
net_sdk_login()
TWdll.NET_SDK_SetSubscribCallBack.argtypes = (c_void_p, c_void_p)
TWdll.NET_SDK_SetSubscribCallBack.restype = BOOL
# info = libc.NET_SDK_SetSubscribCallBack(CallBackFun, pUser)
# time.sleep(20)
return TWdll.NET_SDK_SetSubscribCallBack(CallBackFun, pUser)
執行結果:
SDK初始化成功
設定超時時間成功
用戶登錄成功,lUserID是 1 <class 'int'>
True
回呼成功
回呼函式就沒有執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/19075.html
