CLIENT_QueryDevState
获取前端设备的当前工作状态
BOOL CLIENT_QueryDevState( LONG lLoginID, int nType, char *pBuf, int nBufLen, int *pRetLen, int waittime=1000 );
Parameters
Return Values
成功返回TRUE,失败返回FALSE。
Remarks
获取设备的当前工作状态,当 nType= DH_DEVSTATE_BURNING_PROGRESS时,*pRetLen表示要查询设备的id(0,1,2,……)号。
nType | 查询类型 | 对应的结构体 |
---|---|---|
DH_DEVSTATE_COMM_ALARM | 普通报警状态(包括外部报警,动态检测,视频丢失) | NET_CLIENT_STATE支持16路以下 NET_CLIENT_STATE_EX支持32以下 |
DH_DEVSTATE_SHELTER_ALARM | 遮挡报警状态 | 16字节 |
DH_DEVSTATE_RECORDING | 录象状态 | 16字节 |
DH_DEVSTATE_RESOURCE | 查询系统资源状态 | 3个DWORD |
DH_DEVSTATE_BITRATE | 查询通道码流 | 通道数乘以DWORD |
DH_DEVSTATE_CONN | 查询设备连接状态 | DWORD |
DH_DEVSTATE_DISK | 硬盘状态 | DH_HARDDISK_STATE |
DH_DEVSTATE_PROTOCAL_VER | 网络协议版本号 | int |
DH_DEVSTATE_TALK_ECTYPE | 查询设备支持的语音对讲格式 | DHDEV_TALKFORMAT_LIST |
DH_DEVSTATE_SD_CARD | 查询sd卡信息 | DH_SDCARD_STATE同DH_HARDDISK_STATE结构体一样 |
DH_DEVSTATE_BURNING_DEV | 查询刻录机信息 | DH_BURNING_DEVINFO |
DH_DEVSTATE_BURNING_PROGRESS | 查询刻录进度 | DH_BURNING_PROGRESS |
DH_DEVSTATE_CAMERA | 查询摄像头属性信息 | DHDEV_CAMERA_INFO |
DH_DEVSTATE_SOFTWARE | 设备软件信息 | DHDEV_VERSION_INFO |
DH_DEVSTATE_LANGUAGE | 设备语言支持信息 | DH_DEV_LANGUAGE_INFO |
DH_DEVSTATE_DSP | 查询dsp能力描述 | DHDEV_DSP_ENCODECAP |
DH_DEVSTATE_OEM | 查询oem信息 | DHDEV_OEM_INFO |
DH_DEVSTATE_NET | 查询网络运行状态信息 | DHDEV_TOTAL_NET_STATE |
DH_DEVSTATE_TYPE | 查询设备类型 | 字符串 |
DH_DEVSTATE_SNAP | 查询抓图功能属性(IPC类产品) | DH_SNAP_ATTR_EN |
DH_DEVSTATE_RECORD_TIME | 查询最早录像时间和最近录像时间 | DEV_DISK_RECORD_INFO |
DH_DEVSTATE_NET_RSSI | 查询无线网络信号强度 | DHDEV_WIRELESS_RSS_INFO |
DH_DEVSTATE_BURNING_ATTACH | 查询附件刻录选项 | BOOL |
DH_DEVSTATE_BACKUP_DEV | 查询备份设备详细信息 | DHDEV_BACKUP_LIST |
DH_DEVSTATE_BACKUP_FEEDBACK | 备份进度反馈 | DHDEV_BACKUP_FEEDBACK |
DH_DEVSTATE_ATM_QUERY_TRADE | 查询ATM交易类型 | DH_ATM_QUERY_TRADE |
DH_DEVSTATE_SIP | 查询sip状态 | DHDEV_SIP_STATE |
DH_DEVSTATE_VICHILE_STATE | 查询车载wifi状态 | DHDEV_VEHICLE_WIFI_STATE |
DH_DEVSTATE_TEST_EMAIL | 查询邮件配置是否成功 | DHDEV_FUNC_TEST |
DH_DEVSTATE_SMART_HARD_DISK | 查询硬盘smart信息 | DHDEV_SMART_HARDDISK |
DH_DEVSTATE_TEST_SNAPPICTURE | 查询抓图设置是否成功 | DHDEV_FUNC_TEST |
DH_DEVSTATE_STATIC_ALARM | 查询静态报警状态 | DWORD,每一位表示一个报警通道 |
DH_DEVSTATE_SUBMODULE_INFO | 查询设备子模块信息 | DHDEV_SUBMODULE_INFO |
DH_DEVSTATE_DISKDAMAGE | 查询硬盘坏道能力 | DHDEV_SUBMODULE_INFO |
DH_DEVSTATE_IPC | 查询设备支持的IPC能力 | DH_DEV_IPC_INFO |
DH_DEVSTATE_ALARM_ARM_DISARM | 查询报警布撤防状态 | ALARM_ARM_DISARM_STATE_INFO |
DH_DEVSTATE_ACC_POWEROFF_ALARM | 查询ACC断电报警状态 | 返回一个DWORD, 1表示断电,0表示通电 |
DH_DEVSTATE_TEST_FTP_SERVER | 测试FTP服务器连接 | DHDEV_FTP_SERVER_TEST |
DH_DEVSTATE_3GFLOW_EXCEED | 查询3G流量超出阈值状态 | DHDEV_3GFLOW_EXCEED_STATE_INFO |
See Also
这个不奇怪吧,C/C++ DLL的导出函数大多都是这样子的。而且这玩意儿也永不着高手解决。
你好,
关键是第三个参数,使用什么类型呢呢?
string, StringBuilder, byte, byte[] 我都试过了
DHDEV_TALKFORMAT_LIST m_lstTalkEncode;
BOOL bSuccess = CLIENT_QueryDevState(m_lLoginHandle, DH_DEVSTATE_TALK_ECTYPE, (char*)&m_lstTalkEncode, sizeof(DHDEV_TALKFORMAT_LIST), &retlen, 2000);
C++源码里的调用,
我不知道该怎么再把pBuf返回值转换为DHDEV_TALKFORMAT_LIST类型
要使用指针吗?
@TigerSpringLiu: 如果真是char*的话,参看这个例子:http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/4e387bb3-6b99-4b9d-91bb-9ec00c47e3a4/
但是,从你提供的C++代码来看,这个char*表示一个结构体,那么你应该在你的C#中也写一个同样的结构体:
struct DHDEV_TALKFORMAT_LIST{}
然后你可以在签名中使用:ref DHDEV_TALKFORMAT_LIST 来传入参数。
@Launcher:
你说的这个方法也试了,但是一样不行的。
当然,struct DHDEV_TALKFORMAT_LIST{}肯定是定义了的,这不需要您这样的高手说了
@TigerSpringLiu: 如果接口里是 char* ,你可以用byte[] 数组,然后Marshal.UnsafeAddrOfPinnedArrayElement 来得到指针,然后传给 char* 参数。如果是结构体,你可以用 Marshal.StructureToPtr 来得到指针,然后传给 void* 参数。
关键就看 CLIENT_QueryDevState 中,对char* 咋处理的,C++中直接使用的struct指针,那么原 CLIENT_QueryDevState 的参数类型不是 DHDEV_LIST*的话,就只能是LPVOID,除非它typedef char DHDEV_LIST了。
@Launcher:
多谢关注,貌似解决了,确实是应该使用IntPtr。
http://www.cnblogs.com/badnewfish/archive/2009/11/10/1599648.html 还是这位哥的正解。
以后还向您多多请教,谢了!