110,533
社区成员
发帖
与我相关
我的任务
分享
typedef struct CMS_GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
}*LPCMS_GUID;
#endif
/**@brief 镜头列表节点结构 */
typedef struct CMS_NodeData
{
NODE_HANDLE hNode; /** 节点HANDLE */
int nNodeID; /** 节点ID */
int nNodeType; /** 节点类型 */
int nStatus; /** 节点状态 0 :禁用; 1: 可用*/
int bPTZ; /** 是否云台 */
int nPTZType; /** 云台类型 */
int nPTZAddr; /** 云台地址 */
CMS_GUID devGUID; /** 镜头GUID */
char cName[64]; /** 节点名称 */
char cDescribe[200]; /** 节点描述 */
}*LPCMS_NodeData;
/// <summary>
/// 节点数据结构体
/// </summary>
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct CMS_NodeData
{
// 错误 8 “SAGA.VideoSurveillanceSystems.Client.Common.CMS_NodeData.DevGUID”: 标记为 StructLayout(LayoutKind.Explicit) 的实例字段类型必须具有 FieldOffset 特性 E:\昆明看守所监控\3实现\05Code\VideoSurveillanceSystems\SAGA.VideoSurveillanceSystems.Client.Common\Devices.cs 61 22 SAGA.VideoSurveillanceSystems.Client.Common
public IntPtr NodeHandle;
public int NodeID;
public int NodeType;
public int Status;
public int PTZ;
public int PTZType;
public int PTZAddr;
public LPCMS_GUID DevGUID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public string NodeName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
public string NodeDescribe;
}
/// <summary>
/// 镜头GUID
/// </summary>
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct LPCMS_GUID
{
public uint Data1;
public UInt16 Data2;
public UInt16 Data3;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] Data4;
}
/**@brief 得到第一个节点指针
* @param [IN] hServer 服务器句柄。
* @param [OUT] pData 节点数据结构指针,参见:LPCMS_NodeData。
* @return 返回如下错误码:
* #成功,NOZERO
* #失败,ZERO
* @note
*/
extern int __stdcall CMS_GetFirstNode(IN SERVER_HANDLE hServer,OUT LPCMS_NodeData pData);
[DllImport("CMS_ClientComm.dll", EntryPoint = "CMS_GetFirstNode", ExactSpelling = false, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
private static extern int CMS_GetFirstNode(ref IntPtr hLID, ref CMS_NodeData pData);
public static List<CMS_NodeData> GetAllNode()
{
List<CMS_NodeData> lstNode = new List<CMS_NodeData>();
//获取第一个节点
CMS_NodeData firstData=new CMS_NodeData();
LPCMS_GUID guid =new LPCMS_GUID();
IntPtr prGuid = StructOP.StructToBytes(guid);
IntPtr pr = StructOP.StructToBytes(firstData);
firstData.DevGUID = guid;
int isSuccess = CMS_GetFirstNode(ref ServerInit.ServerHandle, ref firstData);
// uint temp = ServerInit.CMS_GetLastError();
//string eee = ErrorExport.Export(temp);
//循环获取所有节点
// firstData =(LPCMS_NodeData)Marshal.PtrToStructure(pr, typeof(LPCMS_NodeData));
return lstNode;
}
internal static IntPtr StructToBytes(object obj)
{
try
{
//得到结构体的大小
int size = Marshal.SizeOf(obj);
//创建byte数组
// byte[] bytes = new byte[size];
//分配结构体大小的内存空间
IntPtr structPtr = Marshal.AllocHGlobal(size);
//将结构体拷到分配好的内存空间
Marshal.StructureToPtr(obj, structPtr, false);
//从内存空间拷到byte数组
// Marshal.Copy(structPtr, bytes, 0, size);
//释放内存空间
Marshal.FreeHGlobal(structPtr);
//返回byte数组
return structPtr;
}
catch (Exception ex)
{
SAGA.Common.Log.Logger.Log(ex);
return IntPtr.Zero;
}
}