海康SDK文档是用C这样写的:
void CALLBACK g_fSerialDataCallBack(LONG lSerialHandle, char *pRecvDataBuffer, DWORD dwBufSize, DWORD dwUser)
{
//…… 处理接收到的透传数据,pRecvDataBuffer中存放接收到的数据
}
lTranHandle = NET_DVR_SerialStart(lUserID, iSelSerialIndex, g_fSerialDataCallBack, lUserID);//设置回调函数获取透传数据求助高手指点一下delphi应该怎样用实现回调函数接收数据。谢谢。
void CALLBACK g_fSerialDataCallBack(LONG lSerialHandle, char *pRecvDataBuffer, DWORD dwBufSize, DWORD dwUser)
{
//…… 处理接收到的透传数据,pRecvDataBuffer中存放接收到的数据
}
lTranHandle = NET_DVR_SerialStart(lUserID, iSelSerialIndex, g_fSerialDataCallBack, lUserID);//设置回调函数获取透传数据求助高手指点一下delphi应该怎样用实现回调函数接收数据。谢谢。
VC是这样使用DLL库里的NET_DVR_SerialStart函数的:#define NET_DVR_API extern "C"__declspec(dllimport)NET_DVR_API LONG __stdcall NET_DVR_SerialStart(LONG lUserID,LONG lSerialPort,void(CALLBACK *fSerialDataCallBack)(LONG lSerialHandle,char *pRecvDataBuffer,DWORD dwBufSize,DWORD dwUser),DWORD dwUser); //说明函数的入口及参数
void CALLBACK g_fSerialDataCallBack(LONG lSerialHandle, char *pRecvDataBuffer, DWORD dwBufSize, DWORD dwUser)
{
//…… 编写一个回调函数,处理接收到的透传数据,pRecvDataBuffer中存放接收到的数据
}
lTranHandle = NET_DVR_SerialStart(lUserID, iSelSerialIndex, g_fSerialDataCallBack, lUserID);//初始化串口,设置回调函数获取透传数据请教在delphi中装载时调用DLL怎样定义NET_DVR_SerialStart函数入口,说明参数类型,我就是不知道怎样处理第三个参数(是不是称函数指针?)。
begin
//…… 处理接收到的透传数据,pRecvDataBuffer中存放接收到的数据
end;
fSerialDataCallBack=procedure lSerialHandle:LONG;pRecvDataBuffer:PChar;dwBufSize:DWORD;dwUser:DWORD );stdcall;
procedure g_fSerialDataCallBack(lSerialHandle:LONG;pRecvDataBuffer:PChar;dwBufSize:DWORD;dwUser:DWORD );stdcall;
begin
messagedlg('回调过程!',mterror,[mbyes],0);
szReciBuf[0] := pRecvDataBuffer[0];
szReciBuf[1] := pRecvDataBuffer[1];
szReciBuf[2] := pRecvDataBuffer[2];
szReciBuf[3] := pRecvDataBuffer[3];
szReciBuf[4] := pRecvDataBuffer[4];
szReciBuf[5] := pRecvDataBuffer[5];
szReciBuf[6] := pRecvDataBuffer[6];
szReciBuf[7] := pRecvDataBuffer[7];
szReciBuf[8] := pRecvDataBuffer[8];
szReciBuf[9] := pRecvDataBuffer[9];
szReciBuf[10] := pRecvDataBuffer[10];end;