实际调用时回调函数的问题(100)

  • 主题发起人 主题发起人 kunwyf12345
  • 开始时间 开始时间
K

kunwyf12345

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是海康的sdk,用到里面函数net_dvr_setrealdatacallback,调用回调函数提示calling conventions differ,怎么回事啊,不好意思,我现在只有10分 实际调用时的回调函数这样写: type RealDataCallBack = procedure(lRealHandle: Longint;
dwDataType: DWORD;
pBuffer: PByte;
dwBufSize, dwUser: DWORD);
//这句要在调用界面写吗 function NET_DVR_SetRealDataCallBack(lRealHandle: Longint;
CallBack: RealDataCallBack;
dwUser: DWORD): BOOL;
stdcall;
external "HCNetSDK.dll ";
//这句要在调用界面写吗 procedure MyRealDataCallBack(lRealHandle: Longint;
dwDataType: DWORD;
pBuffer: PByte;
dwBufSize, dwUser: DWORD);
//还是直接声明这个函数,然后下面写代码? begin
//此处写回调处理函数的代码 end;

...... var lRealHandle : Longint;
begin
...... lRealHandle := NET_DVR_RealPlay(......);
...... NET_DVR_SetRealDataCallBack(lRealHandle, MyRealDataCallBack, 1000);
//1000为用户数据, 可以借此区分不同的回调 ,为什么这行会出现calling conventions differ错误,怎么回事啊 ...... end;
 
calling conventions differ错误,不是dll调用约定不一致的错误吗?如果原来是c++的dll,可能是cdecl,不是stdcall
 
恩,谢谢你,我改成cdecl了,可是调用时NET_DVR_ThrowBFrame(m_iPlayhandle,1);NET_DVR_SetRealDataCallBack(m_iPlayhandle, @myRealDataCallBack ,1000);//这句报variable required错误
 
我改好了这个只在引用所有dll的函数声明中写一次就可以type tfRealDataCallBack=procedure ( lRealHandle:longint;
dwDataType:DWORD;
pBuffer:pBYTE;
dwBufSize:DWORD;
dwUser:DWORD);cdecl;function NET_DVR_SetRealDataCallBack( lRealHandle:longint;
fRealDataCallBack:tfRealDataCallBack;
dwUser:longint): BOOL;
stdcall;external CoinDllFile;在typeend;
后procedure myRealDataCallBack(lRealHandle:Longint;
dwDataType:DWORD;pBuffer:PByte;dwBufSize,dwUser:DWORD);
cdecl;var frmsysset: Tfrmsysset;//窗体定义前定义自己写的回调函数procedure myRealDataCallBack(lRealHandle:Longint;
dwDataType:DWORD;pBuffer:PByte;dwBufSize,dwUser:DWORD);
cdecl;
begin
//内部实现end;
这样就不出错了,我原先是把procedure myRealDataCallBack(lRealHandle:Longint;
dwDataType:DWORD;pBuffer:PByte;dwBufSize,dwUser:DWORD);
cdecl;放在type中的public里了,这样就是窗体的函数了,就不对了
 
后退
顶部