如何在Delphi中调用复杂VC函数(含有多个二级结构体)

时间:2022-11-19 20:29:18
各位好,碰到个事,实在是搞不明白,很多天了,敬请赐教。还有积分少,真是不好意思。
需要在Delphi中调用一个VC写的DLL中的函数,此函数含有多个二级结构体和指针(海康威视SDK包)
此函数在Demo中的调用

if (!NET_DVR_GetDVRConfig(g_lUserID, NET_DVR_GET_PICCFG_V30, iChanShow,&m_struPicCfg[i], sizeof(NET_DVR_PICCFG_V30), &dwReturned))
{
MessageBox("获得图像参数失败","warning");
}

此函数定义
NET_DVR_GetDVRConfig
获取设备的配置信息。
BOOL NET_DVR_GetDVRConfig(
  LONG     lUserID,
  DWORD    dwCommand,
  LONG     lChannel,
  LPVOID   lpOutBuffer,
  DWORD    dwOutBufferSize,
  LPDWORD  lpBytesReturned
);

函数参数说明

Parameters
lUserID 
[in] NET_DVR_Login或NET_DVR_Login_V30的返回值 
dwCommand 
[in] 设备配置命令,详见“Remarks”说明 
lChannel 
[in] 通道号,不同的命令对应不同的取值,如果该参数无效则置为0xFFFFFFFF即可,详见“Remarks”说明 
lpOutBuffer 
[out] 接收数据的缓冲指针 
dwOutBufferSize 
[in] 接收数据的缓冲长度(以字节为单位),不能为0 
lpBytesReturned 
[out] 实际收到的数据长度指针,不能为NULL 

其中一个我要用到的宏定义参数

dwCommand宏定义 dwCommand含义 lChannel lpOutBuffer对应结构体 宏定义值 
NET_DVR_GET_PICCFG_V40 获取图像参数 通道号 NET_DVR_PICCFG_V40 6179 

相关结构体
typedef struct
{
BYTE byBrightness;   /*亮度,0-255*/
BYTE byContrast;     /*对比度,0-255*/
BYTE bySaturation;   /*饱和度,0-255*/
BYTE byHue;     /*色调,0-255*/
}NET_DVR_COLOR, *LPNET_DVR_COLOR;
//时间段(子结构)
typedef struct
{
//开始时间
    BYTE byStartHour;
BYTE byStartMin;
//结束时间
BYTE byStopHour;
BYTE byStopMin;
}NET_DVR_SCHEDTIME, *LPNET_DVR_SCHEDTIME;
typedef struct
{
NET_DVR_COLOR   struColor[MAX_TIMESEGMENT_V30];/*图象参数(第一个有效,其他三个保留)*/
NET_DVR_SCHEDTIME  struHandleTime[MAX_TIMESEGMENT_V30];/*处理时间段(保留)*/
}NET_DVR_VICOLOR, *LPNET_DVR_VICOLOR;
//遮挡区域(子结构)
typedef struct 
{
WORD wHideAreaTopLeftX; /* 遮挡区域的x坐标 */
WORD wHideAreaTopLeftY; /* 遮挡区域的y坐标 */
WORD wHideAreaWidth; /* 遮挡区域的宽 */
WORD wHideAreaHeight; /*遮挡区域的高*/
}NET_DVR_SHELTER, *LPNET_DVR_SHELTER;
typedef struct
{
DWORD dwEnableVILostAlarm; /* 是否启动信号丢失报警 ,0-否,1-是*/
 /* 信号丢失触发报警输出 */
    DWORD   dwHandleType;        //异常处理,异常处理方式的"或"结果   
    /*0x00: 无响应*/
    /*0x01: 监视器上警告*/
    /*0x02: 声音警告*/
    /*0x04: 上传中心*/
    /*0x08: 触发报警输出*/
    /*0x10: 触发JPRG抓图并上传Email*/
    /*0x20: 无线声光报警器联动*/
    /*0x40: 联动电子地图(目前只有PCNVR支持)*/
    /*0x200: 抓图并上传FTP*/ 
    DWORD   dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量
    DWORD   dwRelAlarmOut[MAX_ALARMOUT_V40]; /*触发报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效*/
NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/
BYTE  byRes[64]; //保留
}NET_DVR_VILOST_V40,*LPNET_DVR_VILOST_V40; //信号丢失报警
typedef struct
{
BYTE byMotionScope[64][96]; /*侦测区域,0-96位,表示64行,共有96*64个小宏块,目前有效的是22*18,为1表示是移动侦测区域,0-表示不是*/
BYTE byMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭*/
BYTE byRes[3];
}NET_DVR_MOTION_SINGLE_AREA, *LPNET_DVR_MOTION_SINGLE_AREA;
//区域框结构
typedef struct tagNET_VCA_RECT
{
float fX;               //边界框左上角点的X轴坐标, 0.001~1
float fY;               //边界框左上角点的Y轴坐标, 0.001~1
float fWidth;           //边界框的宽度, 0.001~1
float fHeight;          //边界框的高度, 0.001~1
}NET_VCA_RECT, *LPNET_VCA_RECT;
typedef struct
{
BYTE byObjectSize;//占比参数(0~100)
BYTE byMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭*/
BYTE byRes[6];
}NET_DVR_DNMODE, *LPNET_DVR_DNMODE;
typedef struct //60
{
BYTE byAreaNo;//区域编号(IPC- 1~8)
BYTE byRes[3];
NET_VCA_RECT struRect;//单个区域的坐标信息(矩形) size = 16;
NET_DVR_DNMODE  struDayNightDisable;//关闭模式
NET_DVR_DNMODE  struDayModeParam;//白天模式
NET_DVR_DNMODE  struNightModeParam;//夜晚模式
BYTE byRes1[8];
}NET_DVR_MOTION_MULTI_AREAPARAM, ;

typedef struct
{
BYTE byDayNightCtrl;//日夜控制 0~关闭,1~自动切换,2~定时切换(默认关闭)
BYTE byRes[3];
NET_DVR_SCHEDULE_DAYTIME struScheduleTime;//切换时间  16
NET_DVR_MOTION_MULTI_AREAPARAM struMotionMultiAreaParam[MAX_MULTI_AREA_NUM];//最大支持24个区域
BYTE byRes1[60];
}NET_DVR_MOTION_MULTI_AREA,*LPNET_DVR_MOTION_MULTI_AREA; //1328
typedef struct 
{
NET_DVR_MOTION_SINGLE_AREA  struMotionSingleArea; //普通模式下的单区域设
NET_DVR_MOTION_MULTI_AREA struMotionMultiArea; //专家模式下的多区域设置
}NET_DVR_MOTION_MODE_PARAM, *LPNET_DVR_MOTION_MODE_PARAM;
typedef struct 
{
NET_DVR_MOTION_MODE_PARAM  struMotionMode; //(5.1.0新增)
BYTE byEnableHandleMotion; /* 是否处理移动侦测 0-否 1-是*/ 
BYTE byEnableDisplay; /*启用移动侦测高亮显示,0-否,1-是*/
BYTE byConfigurationMode; //0~普通,1~专家(5.1.0新增)
BYTE byRes1; //保留字节
  /* 异常处理方式 */
    DWORD   dwHandleType;        //异常处理,异常处理方式的"或"结果   
    /*0x00: 无响应*/
    /*0x01: 监视器上警告*/
    /*0x02: 声音警告*/
    /*0x04: 上传中心*/
    /*0x08: 触发报警输出*/
    /*0x10: 触发JPRG抓图并上传Email*/
    /*0x20: 无线声光报警器联动*/
    /*0x40: 联动电子地图(目前只有PCNVR支持)*/
    /*0x200: 抓图并上传FTP*/ 
    DWORD   dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量
    DWORD   dwRelAlarmOut[MAX_ALARMOUT_V40]; //实际触发的报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效
NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/
 /*触发的录像通道*/
    DWORD     dwMaxRecordChanNum;   //设备支持的最大关联录像通道数-只读
    DWORD     dwRelRecordChan[MAX_CHANNUM_V40];  /* 实际触发录像通道,按值表示,采用紧凑型排列,从下标0 - dwRelRecordChan -1有效,如果中间遇到0xffffffff,则后续无效*/  
BYTE  byRes[128]; //保留字节
}NET_DVR_MOTION_V40,*LPNET_DVR_MOTION_V40;
typedef struct
{
DWORD dwEnableHideAlarm; /* 是否启动遮挡报警,0-否,1-低灵敏度,2-中灵敏度,3-高灵敏度*/
WORD wHideAlarmAreaTopLeftX; /* 遮挡区域的x坐标 */
WORD wHideAlarmAreaTopLeftY; /* 遮挡区域的y坐标 */
WORD wHideAlarmAreaWidth; /* 遮挡区域的宽 */
WORD wHideAlarmAreaHeight; /*遮挡区域的高*/ 
/* 信号丢失触发报警输出 */
    DWORD   dwHandleType;        //异常处理,异常处理方式的"或"结果   
    /*0x00: 无响应*/
    /*0x01: 监视器上警告*/
    /*0x02: 声音警告*/
    /*0x04: 上传中心*/
    /*0x08: 触发报警输出*/
    /*0x10: 触发JPRG抓图并上传Email*/
    /*0x20: 无线声光报警器联动*/
    /*0x40: 联动电子地图(目前只有PCNVR支持)*/
    /*0x200: 抓图并上传FTP*/ 
    DWORD   dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量
DWORD   dwRelAlarmOut[MAX_ALARMOUT_V40]; /*触发报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效*/  
NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/
BYTE  byRes[64]; //保留
}NET_DVR_HIDEALARM_V40,*LPNET_DVR_HIDEALARM_V40; //遮挡报警
typedef struct
{
DWORD  dwSize;
BYTE  sChanName[NAME_LEN]; 
DWORD  dwVideoFormat; /* 只读 视频制式 1-NTSC 2-PAL  */
NET_DVR_VICOLOR struViColor;// 图像参数按时间段设置
//显示通道名
DWORD  dwShowChanName; // 预览的图象上是否显示通道名称,0-不显示,1-显示
WORD    wShowNameTopLeftX; /* 通道名称显示位置的x坐标 */
WORD    wShowNameTopLeftY; /* 通道名称显示位置的y坐标 */
//隐私遮挡
DWORD  dwEnableHide; /* 是否启动遮挡 ,0-否,1-是*/
NET_DVR_SHELTER struShelter[MAX_SHELTERNUM];
//OSD
DWORD  dwShowOsd;// 预览的图象上是否显示OSD,0-不显示,1-显示
WORD   wOSDTopLeftX; /* OSD的x坐标 */
WORD   wOSDTopLeftY; /* OSD的y坐标 */
BYTE    byOSDType; /* OSD类型(主要是年月日格式) */
/* 0: XXXX-XX-XX 年月日 */
/* 1: XX-XX-XXXX 月日年 */
/* 2: XXXX年XX月XX日 */
/* 3: XX月XX日XXXX年 */
/* 4: XX-XX-XXXX 日月年*/
/* 5: XX日XX月XXXX年 */
/*6: xx/xx/xxxx(月/日/年) */
/*7: xxxx/xx/xx(年/月/日) */
/*8: xx/xx/xxxx(日/月/年)*/
BYTE    byDispWeek; /* 是否显示星期 */
BYTE    byOSDAttrib; /* OSD属性:透明,闪烁 */
/* 0: 不显示OSD */
/* 1: 透明,闪烁 */
/* 2: 透明,不闪烁 */
/* 3: 不透明,闪烁 */
/* 4: 不透明,不闪烁 */
BYTE    byHourOSDType; /* OSD小时制:0-24小时制,1-12小时制 */
BYTE    byFontSize;      //16*16(中)/8*16(英),1-32*32(中)/16*32(英),2-64*64(中)/32*64(英) FOR 91系列HD-SDI高清DVR
BYTE    byRes1[3]; //保留
NET_DVR_VILOST_V40 struVILost;  //视频信号丢失报警(支持组)
NET_DVR_VILOST_V40 struAULost;  /*音频信号丢失报警(支持组)*/
NET_DVR_MOTION_V40 struMotion;  //移动侦测报警(支持组)
NET_DVR_HIDEALARM_V40 struHideAlarm;  //遮挡报警(支持组)
BYTE    byRes[128];
}NET_DVR_PICCFG_V40,*LPNET_DVR_PICCFG_V40;

6 个解决方案

#1


下面是我转好的Delphi的结构体

  NAME_LEN=32;
  STREAM_ID_LEN= 32;
  MAX_DAYS=7;  //每周天数
  MAX_CHANNUM=16;
  MAX_CHANNUM_V40=512;
  MAX_TIMESEGMENT_V30=8;//9000设备最大时间段数
  MAX_SHELTERNUM=4;       //8000设备最大遮挡区域数
  NET_DVR_GET_PICCFG_V40=6179;    //获取图象参数 支持变长
  NET_DVR_SET_PICCFG_V40=6180;    //设置图象参数, 支持变长

  LPNET_DVR_COLOR=^NET_DVR_COLOR;
  NET_DVR_COLOR= record
    byBrightness:Byte; //亮度,0-255
    byContrast:Byte;   //对比度,0-255
    bySaturation:Byte; //饱和度,0-255
    byHue:Byte;        //色调,0-255
  end;
  //时间段(子结构)
  LPNET_DVR_SCHEDTIME=^NET_DVR_SCHEDTIME;
  NET_DVR_SCHEDTIME= record
    byStartHour:Byte;//开始时间
    byStartMin:Byte;
    byStopHour:Byte;//结束时间
    byStopMin:Byte;
  end;
  LPNET_DVR_VICOLOR=^NET_DVR_VICOLOR;
  NET_DVR_VICOLOR= record
    struColor:Array[0..MACADDR_LEN-1] of NET_DVR_COLOR;//图象参数(第一个有效,其他三个保留)
    struHandleTime:Array[0..MAX_TIMESEGMENT_V30-1] of NET_DVR_SCHEDTIME; //处理时间段(保留)
  end;
  //遮挡区域(子结构)
  LPNET_DVR_SHELTER=^NET_DVR_SHELTER;
  NET_DVR_SHELTER= record
    wHideAreaTopLeftX:Word;//遮挡区域的x坐标
    wHideAreaTopLeftY:Word;//遮挡区域的y坐标
    wHideAreaWidth:Word;//遮挡区域的宽
    wHideAreaHeigh:Word;//遮挡区域的高
  end;
  //信号丢失报警
  LPNET_DVR_VILOST_V40=^NET_DVR_VILOST_V40;
  NET_DVR_VILOST_V40= record
    dwEnableVILostAlarm:LongWord;//是否启动信号丢失报警 ,0-否,1-是
    dwHandleType:LongWord;//异常处理,异常处理方式的"或"结果
    dwMaxRelAlarmOutChanNum:LongWord;//触发的报警输出通道数(只读)最大支持数量
    dwRelAlarmOut:array [0..MAX_ALARMOUT_V40-1] of LongWord;//触发报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效*/
    struAlarmTime:array [0..MAX_DAYS-1,0..MAX_TIMESEGMENT_V30-1] of NET_DVR_SCHEDTIME;//布防时间
    byRes:array [0..63] of Byte;//保留
  end;
  LPNET_DVR_MOTION_SINGLE_AREA=^NET_DVR_MOTION_SINGLE_AREA;
  NET_DVR_MOTION_SINGLE_AREA= record
    byMotionScope:array [0..63,0..95] of Byte;//侦测区域,0-96位,表示64行,共有96*64个小宏块,目前有效的是22*18,为1表示是移动侦测区域,0-表示不是
    byMotionSensitive:Byte;//移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭
    byRes:array [0..2] of Byte;
  end;
  //区域框结构
  LPNET_VCA_RECT=^NET_VCA_RECT;
  NET_VCA_RECT= record
    fX:LongWord;
    fY:LongWord;
    fWidth:LongWord;
    fHeight:LongWord;
  end;
  LPNET_DVR_DNMODE=^NET_DVR_DNMODE;
  NET_DVR_DNMODE= record
    byObjectSize:Byte;//占比参数(0~100)
    byMotionSensitive:Byte; //移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭
    byRes:array [0..5] of Byte;
  end;
  LPNET_DVR_MOTION_MULTI_AREAPARAM=^NET_DVR_MOTION_MULTI_AREAPARAM;
  NET_DVR_MOTION_MULTI_AREAPARAM= record
    byAreaNo:Byte;//区域编号(IPC- 1~8)
    byRes:array [0..2] of Byte;
    struRect:NET_VCA_RECT;//单个区域的坐标信息(矩形) size = 16;
    struDayNightDisable:NET_DVR_DNMODE;//关闭模式
    struDayModeParam:NET_DVR_DNMODE;//白天模式
    struNightModeParam:NET_DVR_DNMODE;//夜晚模式
    byRes1:array [0..7] of Byte;
  end;
  LPNET_DVR_MOTION_MULTI_AREA=^NET_DVR_MOTION_MULTI_AREA;
  NET_DVR_MOTION_MULTI_AREA= record
    byDayNightCtrl:Byte;//日夜控制 0~关闭,1~自动切换,2~定时切换(默认关闭)
    byRes:array [0..2] of Byte;
    struScheduleTime:NET_DVR_SCHEDULE_DAYTIME;//切换时间  16
    struMotionMultiAreaParam:array [0..MAX_MULTI_AREA_NUM-1] of NET_DVR_MOTION_MULTI_AREAPARAM;//最大支持24个区域
    byRes1:array [0..59] of Byte;
  end;

  LPNET_DVR_MOTION_MODE_PARAM=^NET_DVR_MOTION_MODE_PARAM;
  NET_DVR_MOTION_MODE_PARAM= record
    struMotionSingleArea:NET_DVR_MOTION_SINGLE_AREA; //普通模式下的单区域设
    struMotionMultiArea:NET_DVR_MOTION_MULTI_AREA; //专家模式下的多区域设置
  end;


  LPNET_DVR_MOTION_V40=^NET_DVR_MOTION_V40;
  NET_DVR_MOTION_V40= record
    struMotionMode:NET_DVR_MOTION_MODE_PARAM;
    byEnableHandleMotion:Byte;  //是否处理移动侦测 0-否 1-是
    byEnableDisplay:Byte;    //启用移动侦测高亮显示,0-否,1-是
    byConfigurationMode:Byte; //0~普通,1~专家(5.1.0新增)
    byRes1:Byte;
    dwHandleType:LongWord; //异常处理,异常处理方式的"或"结果
    dwMaxRelAlarmOutChanNum:LongWord;
    dwRelAlarmOut:array [0..MAX_ALARMOUT_V40-1] of LongWord;//实际触发的报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效
    struAlarmTime:array [0..MAX_DAYS-1,0..MAX_TIMESEGMENT_V30-1] of NET_DVR_SCHEDTIME;//布防时间
    //触发的录像通道
    dwMaxRecordChanNum:LongWord;
    dwRelRecordChan:array [0..MAX_CHANNUM_V40-1] of LongWord;//实际触发录像通道,按值表示,采用紧凑型排列,从下标0 - dwRelRecordChan -1有效,如果中间遇到0xffffffff,则后续无效*/
    byRes:array [0..127] of Byte;
  end;
  //遮挡报警
  LPNET_DVR_HIDEALARM_V40=^NET_DVR_HIDEALARM_V40;
  NET_DVR_HIDEALARM_V40= record
    dwEnableHideAlarm:LongInt;//是否启动遮挡报警,0-否,1-低灵敏度,2-中灵敏度,3-高灵敏度
    wHideAlarmAreaTopLeftX:Word;  //遮挡区域的x坐标
    wHideAlarmAreaTopLeftY:Word;  //遮挡区域的y坐标
    wHideAlarmAreaWidth:Word;     //遮挡区域的宽
    wHideAlarmAreaHeight:Word;    //遮挡区域的高
    dwHandleType:LongInt;//信号丢失触发报警输出
    dwMaxRelAlarmOutChanNum:LongInt;//触发的报警输出通道数(只读)最大支持数量
    dwRelAlarmOut:array [0..MAX_ALARMOUT_V40] of LongInt;//触发报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效
    struAlarmTime:array [0..MAX_DAYS,0..MAX_TIMESEGMENT_V30] of NET_DVR_SCHEDTIME;//布防时间
    byRes:array [0..63] of Byte;
  end;
  LPNET_DVR_PICCFG_V40=^NET_DVR_PICCFG_V40;
  NET_DVR_PICCFG_V40= record
    dwSize:LongWord;
    sChanName:array[0..NAME_LEN-1] of Byte;
    dwVideoFormat:LongWord; //只读 视频制式 1-NTSC 2-PAL
    struViColor:NET_DVR_VICOLOR; // 图像参数按时间段设置
    //显示通道名
    dwShowChanName:LongWord; // 预览的图象上是否显示通道名称,0-不显示,1-显示
    wShowNameTopLeftX:Word; //通道名称显示位置的x坐标
    wShowNameTopLeftY:Word; //通道名称显示位置的y坐标
    //隐私遮挡
    dwEnableHide:LongWord;
    struShelter:Array[0..MAX_SHELTERNUM-1] of NET_DVR_SHELTER;
    //OSD
    dwShowOsd:LongWord;//预览的图象上是否显示OSD,0-不显示,1-显示
    wOSDTopLeftX:Word;//OSD的x坐标
    wOSDTopLeftY:Word;//OSD的y坐标
    byOSDType:Byte;//OSD类型(主要是年月日格式)
    byDispWeek:Byte;//是否显示星期
    byOSDAttrib:Byte;//OSD属性:透明,闪烁
    byHourOSDType:Byte;//OSD小时制:0-24小时制,1-12小时制
    byFontSize:Byte;//16*16(中)/8*16(英),1-32*32(中)/16*32(英),2-64*64(中)/32*64(英) FOR 91系列HD-SDI高清DVR
    byRes1array:array[0..2] of Byte;//保留
    struVILost:NET_DVR_VILOST_V40; //视频信号丢失报警(支持组)
    struAULost:NET_DVR_VILOST_V40; //音频信号丢失报警(支持组)
    struMotion:NET_DVR_MOTION_V40; //移动侦测报警(支持组)
    struHideAlarm:NET_DVR_HIDEALARM_V40; //遮挡报警(支持组)
    byRes:array[0..127] of Byte;
  end;

#2


我在Delphi中此函数的定义

HK_DLL='HCNetSDK.dll';
function NET_DVR_GetDVRConfig(lUserID:LongInt;
                              dwCommand:LongWord;
                              lChannel:LongInt;
                              lpOutBuffer:Pointer;
                              dwOutBufferSize:LongInt;
                              lpBytesReturned:PWORD):Boolean ;stdcall;external HK_DLL

#3


结构体太多了,补上两个

  LPNET_DVR_DAYTIME=^NET_DVR_DAYTIME;
  NET_DVR_DAYTIME= record
    byHour:Byte;//0~24
    byMinute:Byte;//0~60
    bySecond:Byte;//0~60
    byRes:Byte;
    wMilliSecond:Word; //0~1000
    byRes1:array [0..1] of Byte;
  end;
  LPNET_DVR_SCHEDULE_DAYTIME=^NET_DVR_SCHEDULE_DAYTIME;
  NET_DVR_SCHEDULE_DAYTIME= record
    struStartTime:NET_DVR_DAYTIME;//开始时间
    struStopTime:NET_DVR_DAYTIME; //结束时间
  end;

#4


有没有新的突破啊 LZ

#5


你调 用提示什么呢看的翻译的无大碍啊 

#6


返回值有问题,dwShowChanName,dwShowOsd都显示的是0,实际上我已经用客户端软件设置为1了

#1


下面是我转好的Delphi的结构体

  NAME_LEN=32;
  STREAM_ID_LEN= 32;
  MAX_DAYS=7;  //每周天数
  MAX_CHANNUM=16;
  MAX_CHANNUM_V40=512;
  MAX_TIMESEGMENT_V30=8;//9000设备最大时间段数
  MAX_SHELTERNUM=4;       //8000设备最大遮挡区域数
  NET_DVR_GET_PICCFG_V40=6179;    //获取图象参数 支持变长
  NET_DVR_SET_PICCFG_V40=6180;    //设置图象参数, 支持变长

  LPNET_DVR_COLOR=^NET_DVR_COLOR;
  NET_DVR_COLOR= record
    byBrightness:Byte; //亮度,0-255
    byContrast:Byte;   //对比度,0-255
    bySaturation:Byte; //饱和度,0-255
    byHue:Byte;        //色调,0-255
  end;
  //时间段(子结构)
  LPNET_DVR_SCHEDTIME=^NET_DVR_SCHEDTIME;
  NET_DVR_SCHEDTIME= record
    byStartHour:Byte;//开始时间
    byStartMin:Byte;
    byStopHour:Byte;//结束时间
    byStopMin:Byte;
  end;
  LPNET_DVR_VICOLOR=^NET_DVR_VICOLOR;
  NET_DVR_VICOLOR= record
    struColor:Array[0..MACADDR_LEN-1] of NET_DVR_COLOR;//图象参数(第一个有效,其他三个保留)
    struHandleTime:Array[0..MAX_TIMESEGMENT_V30-1] of NET_DVR_SCHEDTIME; //处理时间段(保留)
  end;
  //遮挡区域(子结构)
  LPNET_DVR_SHELTER=^NET_DVR_SHELTER;
  NET_DVR_SHELTER= record
    wHideAreaTopLeftX:Word;//遮挡区域的x坐标
    wHideAreaTopLeftY:Word;//遮挡区域的y坐标
    wHideAreaWidth:Word;//遮挡区域的宽
    wHideAreaHeigh:Word;//遮挡区域的高
  end;
  //信号丢失报警
  LPNET_DVR_VILOST_V40=^NET_DVR_VILOST_V40;
  NET_DVR_VILOST_V40= record
    dwEnableVILostAlarm:LongWord;//是否启动信号丢失报警 ,0-否,1-是
    dwHandleType:LongWord;//异常处理,异常处理方式的"或"结果
    dwMaxRelAlarmOutChanNum:LongWord;//触发的报警输出通道数(只读)最大支持数量
    dwRelAlarmOut:array [0..MAX_ALARMOUT_V40-1] of LongWord;//触发报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效*/
    struAlarmTime:array [0..MAX_DAYS-1,0..MAX_TIMESEGMENT_V30-1] of NET_DVR_SCHEDTIME;//布防时间
    byRes:array [0..63] of Byte;//保留
  end;
  LPNET_DVR_MOTION_SINGLE_AREA=^NET_DVR_MOTION_SINGLE_AREA;
  NET_DVR_MOTION_SINGLE_AREA= record
    byMotionScope:array [0..63,0..95] of Byte;//侦测区域,0-96位,表示64行,共有96*64个小宏块,目前有效的是22*18,为1表示是移动侦测区域,0-表示不是
    byMotionSensitive:Byte;//移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭
    byRes:array [0..2] of Byte;
  end;
  //区域框结构
  LPNET_VCA_RECT=^NET_VCA_RECT;
  NET_VCA_RECT= record
    fX:LongWord;
    fY:LongWord;
    fWidth:LongWord;
    fHeight:LongWord;
  end;
  LPNET_DVR_DNMODE=^NET_DVR_DNMODE;
  NET_DVR_DNMODE= record
    byObjectSize:Byte;//占比参数(0~100)
    byMotionSensitive:Byte; //移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭
    byRes:array [0..5] of Byte;
  end;
  LPNET_DVR_MOTION_MULTI_AREAPARAM=^NET_DVR_MOTION_MULTI_AREAPARAM;
  NET_DVR_MOTION_MULTI_AREAPARAM= record
    byAreaNo:Byte;//区域编号(IPC- 1~8)
    byRes:array [0..2] of Byte;
    struRect:NET_VCA_RECT;//单个区域的坐标信息(矩形) size = 16;
    struDayNightDisable:NET_DVR_DNMODE;//关闭模式
    struDayModeParam:NET_DVR_DNMODE;//白天模式
    struNightModeParam:NET_DVR_DNMODE;//夜晚模式
    byRes1:array [0..7] of Byte;
  end;
  LPNET_DVR_MOTION_MULTI_AREA=^NET_DVR_MOTION_MULTI_AREA;
  NET_DVR_MOTION_MULTI_AREA= record
    byDayNightCtrl:Byte;//日夜控制 0~关闭,1~自动切换,2~定时切换(默认关闭)
    byRes:array [0..2] of Byte;
    struScheduleTime:NET_DVR_SCHEDULE_DAYTIME;//切换时间  16
    struMotionMultiAreaParam:array [0..MAX_MULTI_AREA_NUM-1] of NET_DVR_MOTION_MULTI_AREAPARAM;//最大支持24个区域
    byRes1:array [0..59] of Byte;
  end;

  LPNET_DVR_MOTION_MODE_PARAM=^NET_DVR_MOTION_MODE_PARAM;
  NET_DVR_MOTION_MODE_PARAM= record
    struMotionSingleArea:NET_DVR_MOTION_SINGLE_AREA; //普通模式下的单区域设
    struMotionMultiArea:NET_DVR_MOTION_MULTI_AREA; //专家模式下的多区域设置
  end;


  LPNET_DVR_MOTION_V40=^NET_DVR_MOTION_V40;
  NET_DVR_MOTION_V40= record
    struMotionMode:NET_DVR_MOTION_MODE_PARAM;
    byEnableHandleMotion:Byte;  //是否处理移动侦测 0-否 1-是
    byEnableDisplay:Byte;    //启用移动侦测高亮显示,0-否,1-是
    byConfigurationMode:Byte; //0~普通,1~专家(5.1.0新增)
    byRes1:Byte;
    dwHandleType:LongWord; //异常处理,异常处理方式的"或"结果
    dwMaxRelAlarmOutChanNum:LongWord;
    dwRelAlarmOut:array [0..MAX_ALARMOUT_V40-1] of LongWord;//实际触发的报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效
    struAlarmTime:array [0..MAX_DAYS-1,0..MAX_TIMESEGMENT_V30-1] of NET_DVR_SCHEDTIME;//布防时间
    //触发的录像通道
    dwMaxRecordChanNum:LongWord;
    dwRelRecordChan:array [0..MAX_CHANNUM_V40-1] of LongWord;//实际触发录像通道,按值表示,采用紧凑型排列,从下标0 - dwRelRecordChan -1有效,如果中间遇到0xffffffff,则后续无效*/
    byRes:array [0..127] of Byte;
  end;
  //遮挡报警
  LPNET_DVR_HIDEALARM_V40=^NET_DVR_HIDEALARM_V40;
  NET_DVR_HIDEALARM_V40= record
    dwEnableHideAlarm:LongInt;//是否启动遮挡报警,0-否,1-低灵敏度,2-中灵敏度,3-高灵敏度
    wHideAlarmAreaTopLeftX:Word;  //遮挡区域的x坐标
    wHideAlarmAreaTopLeftY:Word;  //遮挡区域的y坐标
    wHideAlarmAreaWidth:Word;     //遮挡区域的宽
    wHideAlarmAreaHeight:Word;    //遮挡区域的高
    dwHandleType:LongInt;//信号丢失触发报警输出
    dwMaxRelAlarmOutChanNum:LongInt;//触发的报警输出通道数(只读)最大支持数量
    dwRelAlarmOut:array [0..MAX_ALARMOUT_V40] of LongInt;//触发报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效
    struAlarmTime:array [0..MAX_DAYS,0..MAX_TIMESEGMENT_V30] of NET_DVR_SCHEDTIME;//布防时间
    byRes:array [0..63] of Byte;
  end;
  LPNET_DVR_PICCFG_V40=^NET_DVR_PICCFG_V40;
  NET_DVR_PICCFG_V40= record
    dwSize:LongWord;
    sChanName:array[0..NAME_LEN-1] of Byte;
    dwVideoFormat:LongWord; //只读 视频制式 1-NTSC 2-PAL
    struViColor:NET_DVR_VICOLOR; // 图像参数按时间段设置
    //显示通道名
    dwShowChanName:LongWord; // 预览的图象上是否显示通道名称,0-不显示,1-显示
    wShowNameTopLeftX:Word; //通道名称显示位置的x坐标
    wShowNameTopLeftY:Word; //通道名称显示位置的y坐标
    //隐私遮挡
    dwEnableHide:LongWord;
    struShelter:Array[0..MAX_SHELTERNUM-1] of NET_DVR_SHELTER;
    //OSD
    dwShowOsd:LongWord;//预览的图象上是否显示OSD,0-不显示,1-显示
    wOSDTopLeftX:Word;//OSD的x坐标
    wOSDTopLeftY:Word;//OSD的y坐标
    byOSDType:Byte;//OSD类型(主要是年月日格式)
    byDispWeek:Byte;//是否显示星期
    byOSDAttrib:Byte;//OSD属性:透明,闪烁
    byHourOSDType:Byte;//OSD小时制:0-24小时制,1-12小时制
    byFontSize:Byte;//16*16(中)/8*16(英),1-32*32(中)/16*32(英),2-64*64(中)/32*64(英) FOR 91系列HD-SDI高清DVR
    byRes1array:array[0..2] of Byte;//保留
    struVILost:NET_DVR_VILOST_V40; //视频信号丢失报警(支持组)
    struAULost:NET_DVR_VILOST_V40; //音频信号丢失报警(支持组)
    struMotion:NET_DVR_MOTION_V40; //移动侦测报警(支持组)
    struHideAlarm:NET_DVR_HIDEALARM_V40; //遮挡报警(支持组)
    byRes:array[0..127] of Byte;
  end;

#2


我在Delphi中此函数的定义

HK_DLL='HCNetSDK.dll';
function NET_DVR_GetDVRConfig(lUserID:LongInt;
                              dwCommand:LongWord;
                              lChannel:LongInt;
                              lpOutBuffer:Pointer;
                              dwOutBufferSize:LongInt;
                              lpBytesReturned:PWORD):Boolean ;stdcall;external HK_DLL

#3


结构体太多了,补上两个

  LPNET_DVR_DAYTIME=^NET_DVR_DAYTIME;
  NET_DVR_DAYTIME= record
    byHour:Byte;//0~24
    byMinute:Byte;//0~60
    bySecond:Byte;//0~60
    byRes:Byte;
    wMilliSecond:Word; //0~1000
    byRes1:array [0..1] of Byte;
  end;
  LPNET_DVR_SCHEDULE_DAYTIME=^NET_DVR_SCHEDULE_DAYTIME;
  NET_DVR_SCHEDULE_DAYTIME= record
    struStartTime:NET_DVR_DAYTIME;//开始时间
    struStopTime:NET_DVR_DAYTIME; //结束时间
  end;

#4


有没有新的突破啊 LZ

#5


你调 用提示什么呢看的翻译的无大碍啊 

#6


返回值有问题,dwShowChanName,dwShowOsd都显示的是0,实际上我已经用客户端软件设置为1了