[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct NET_DVR_IPADDR
{
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 16)]
public string sIpV4; //IPv4地址
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 128)]
public byte[] sIpV6;//设备IP地址
} [StructLayoutAttribute(LayoutKind.Sequential)]
public struct NET_DVR_CHANNELSTATE_V30
{
public byte byRecordStatic;//通道是否在录像:0-不录像;1-录像
public byte bySignalStatic;//通道是否在录像:0-不录像;1-录像
public byte byHardwareStatic;//通道硬件状态:0-正常,1-异常(例如DSP异常)
public byte byRes1;//保留,置为0
public uint dwBitRate;//实际码率
public uint dwLinkNum;//连接的客户端个数
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public NET_DVR_IPADDR[] struClientIP;//连接的客户端IP地址
public uint dwIPLinkNum;//如果该通道为IP接入,那么表示IP接入当前的连接数
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 12, ArraySubType = UnmanagedType.I1)]
public byte byRes;//保留,置为0
} [StructLayoutAttribute(LayoutKind.Sequential)]
public struct DVR_WORKSTATE_V30
{
public uint dwDeviceStatic;//设备的状态:0-正常;1-CPU占用率太高,超过85%;2-硬件错误,例如串口异常
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 33)]
public NET_DVR_DISKSTATE[] struHardDiskStatic;//硬盘状态
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_ANALOG_CHANNUM+MAX_IP_CHANNEL)]
public NET_DVR_CHANNELSTATE_V30[] struChanStatic;//通道状态
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_ANALOG_ALARMIN+MAX_IP_ALARMIN)]
public byte[] byAlarmInStatic;//报警输入口的状态:0-没有报警;1-有报警
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_ANALOG_ALARMOUT+MAX_IP_ALARMOUT)]
public byte[] byAlarmOutStatic;//报警输出口的状态:0-没有输出,1-有报警输出
public uint dwLocalDisplay;//本地显示状态:0-正常,1-不正常
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public byte[] byAudioChanStatus;//表示语音通道的状态:0-未使用,1-使用中,0xff无效
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 10, ArraySubType = UnmanagedType.I1)]
public byte[] byRes;
}[DllImport("HCNetSDK.dll")]
public static extern bool NET_DVR_GetDVRWorkState_V30(Int32 lUserID, ref NET_DVR_WORKSTATE lpWorkState);
但是程序就是出现问题
public struct NET_DVR_IPADDR
{
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 16)]
public string sIpV4; //IPv4地址
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 128)]
public byte[] sIpV6;//设备IP地址
} [StructLayoutAttribute(LayoutKind.Sequential)]
public struct NET_DVR_CHANNELSTATE_V30
{
public byte byRecordStatic;//通道是否在录像:0-不录像;1-录像
public byte bySignalStatic;//通道是否在录像:0-不录像;1-录像
public byte byHardwareStatic;//通道硬件状态:0-正常,1-异常(例如DSP异常)
public byte byRes1;//保留,置为0
public uint dwBitRate;//实际码率
public uint dwLinkNum;//连接的客户端个数
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public NET_DVR_IPADDR[] struClientIP;//连接的客户端IP地址
public uint dwIPLinkNum;//如果该通道为IP接入,那么表示IP接入当前的连接数
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 12, ArraySubType = UnmanagedType.I1)]
public byte byRes;//保留,置为0
} [StructLayoutAttribute(LayoutKind.Sequential)]
public struct DVR_WORKSTATE_V30
{
public uint dwDeviceStatic;//设备的状态:0-正常;1-CPU占用率太高,超过85%;2-硬件错误,例如串口异常
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 33)]
public NET_DVR_DISKSTATE[] struHardDiskStatic;//硬盘状态
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_ANALOG_CHANNUM+MAX_IP_CHANNEL)]
public NET_DVR_CHANNELSTATE_V30[] struChanStatic;//通道状态
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_ANALOG_ALARMIN+MAX_IP_ALARMIN)]
public byte[] byAlarmInStatic;//报警输入口的状态:0-没有报警;1-有报警
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_ANALOG_ALARMOUT+MAX_IP_ALARMOUT)]
public byte[] byAlarmOutStatic;//报警输出口的状态:0-没有输出,1-有报警输出
public uint dwLocalDisplay;//本地显示状态:0-正常,1-不正常
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public byte[] byAudioChanStatus;//表示语音通道的状态:0-未使用,1-使用中,0xff无效
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 10, ArraySubType = UnmanagedType.I1)]
public byte[] byRes;
}[DllImport("HCNetSDK.dll")]
public static extern bool NET_DVR_GetDVRWorkState_V30(Int32 lUserID, ref NET_DVR_WORKSTATE lpWorkState);
但是程序就是出现问题
海康威视提供的SDK 但是是C++的不怎么会用啊