大华API调用
以下是浙江大华API的接口函数原型以及相关结构声明:
查询局域网设备
BOOL CLIENT_SearchDevices(
char* szBuf,
int nBufLen,
int* pRetLen,
DWORD dwSearchTime
);
Parameters
[out]szBuf
用户开辟缓存,用来接收DEVICE_NET_INFO结构体,查询到几个设备,就返回几个这样的结构体
[in]nBufLen
szBuf缓存长度
[out]pRetLen
返回DEVICE_NET_INFO结构体长度之和
[in]dwSearchTime
查询等待时间
结构定义如下:
DEVICE_NET_INFO{
char szIP[DH_MAX_IPADDR_LEN];
int nPort;
char szSubmask[DH_MAX_IPADDR_LEN];
char szGateway[DH_MAX_IPADDR_LEN];
char szMac[DH_MACADDR_LEN];
char szDeviceType[DH_DEV_TYPE_LEN];
BYTE bReserved[32];
};
我在C#环境中想调用此接口函数,我的声明以及调用代码如下:
C#中结构声明:
[StructLayout(LayoutKind.Sequential)]
public struct DEVICE_NET_INFO
{
/// <summary>
/// IP地址
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] szIP;
/// <summary>
/// 端口
/// </summary>
public int nPort;
/// <summary>
/// 子网掩码
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] szSubmask;
/// <summary>
/// 网关
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] szGateway;
/// <summary>
/// Mac
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)]
public byte[] szMac;
/// <summary>
/// 设备类型
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] szDeviceType;
/// <summary>
/// 保留字节
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] bReserverd;
}
C#中接口函数声明:
[DllImport("dhnetsdk.dll")]
private static extern bool CLIENT_SearchDevices([Out,MarshalAs(UnmanagedType.LPArray)] DEVICE_NET_INFO[] dni, int nBufLen, out int pRetLen, int dwSearchTime);
C#中调用代码如下:
DEVICE_NET_INFO[] dni;
dni = new DEVICE_NET_INFO[100];
int pRetLen = 0;
int uSearchTime = 5000;
bool ret = DHClient.DHSearchDevices(dni, 100 * Marshal.SizeOf(typeof(DEVICE_NET_INFO)), out pRetLen, uSearchTime);
调用不成功,每次都是返回False,请大人帮忙解决,谢谢!!!