海康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应该怎样用实现回调函数接收数据。谢谢。

解决方案 »

  1.   

    有哪位用delphi做过海康SDK的开发,给一个其它功能(如预览图像)的通过回调函数接收数据的代码供学习也行。求指点,多谢了。
      

  2.   

    procedure g_fSerialDataCallBack(lSerialHandle:long; pRecvDataBuffer:pchar;  dwBufSize, dwUser:DWORD);stdcall;External'your.dll'
      

  3.   

    我遇到的问题是不确定回调函数是否处理正确。
    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函数入口,说明参数类型,我就是不知道怎样处理第三个参数(是不是称函数指针?)。
      

  4.   

    procedure g_fSerialDataCallBack(lSerialHandle: Cardinal; pRecvDataBuffer: PChar; dwBufSize: Cardinal; dwUser: Cardinal);
    begin
      //…… 处理接收到的透传数据,pRecvDataBuffer中存放接收到的数据
    end;
      

  5.   

    以上是我写的代码,现在可以通过485接口发数据至下联485设备并实现正确,但下联485设备回复的数据收不到,跟踪程序运行发现回调过程没有运行。海康SDK的clientdemo程序也只能收到0x0。求高人指教。我觉得是我函数指针没处理好。
      

  6.   

    type 
    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;
      

  7.   

    用pelco_d协议发送数据,发送成功,可485设备回复的数据收不到,我也是用c++遇到同样的问题