函 数: BOOL NET_DVR_GetPlayBackOsdTime(LONG lPlayHandle, LPNET_DVR_TIME lpOsdTime)
参 数: [in]lPlayHandle
[out]lpOsdTime
播放句柄,NET_DVR_PlayBackByName 或
NET_DVR_PlayBackByTime_V40 的返回值
获取的OSD 时间的指针以上是海康的说明书对这个函数的说明,以下是delphi 的函数。请问一下   var lpOsdTime: NET_DVR_TIME ,我应该怎么写?function NET_DVR_GetPlayBackOsdTime(lPlayHandle: LongInt;
                                    var lpOsdTime: NET_DVR_TIME):  BOOL ;stdcall;external 'HCNetSDK.dll'

解决方案 »

  1.   


    type
      NET_DVR_TIME = record
        dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond: Cardinal;
      end;
      LPNET_DVR_TIME = ^NET_DVR_TIME;function NET_DVR_GetPlayBackOsdTime(lPlayHandle: LongInt;
             lpOsdTime: LPNET_DVR_TIME): Boolean; stdcall; external 'HCNetSDK.dll';
      

  2.   

    如果参数lpOsdTime不允许为空指针,使用var参数更恰当,当然直接用指针也可以。使用变参的话,传入NET_DVR_TIME类型变量既可。
      

  3.   


    function NET_DVR_GetPlayBackOsdTime(lPlayHandle: LongInt;
             lpOsdTime: LPNET_DVR_TIME): Boolean; stdcall; external 'HCNetSDK.dll';和function NET_DVR_GetPlayBackOsdTime(lPlayHandle: LongInt;
       var lpOsdTime: NET_DVR_TIME): Boolean; stdcall; external 'HCNetSDK.dll';在 Delphi 的语法上是完全等效的,不过如二楼所说,后者比前者要好,因为调用者可声明为局部变量,调用返回后自动释放,对内存效率要高一些,而且也相对安全。
      

  4.   

    //采用第一种方式,主要是考虑到保持函数的定义与c函数的定义一致, 使用方式如下:
    var
      PlayHandle: LongInt;
      OsdTime: NET_DVR_TIME;
      Rst: Boolean;
    begin
      Rst := NET_DVR_GetPlayBackOsdTime(PlayHandle,  @OsdTime); //第一种方式
      //Rst := NET_DVR_GetPlayBackOsdTime(PlayHandle,  OsdTime); //第二种方式
    end;
    //其实两种方式是等效的,都是传OsdTime的地址。
    //调用过程中不存在内存需要释放的问题。