unsafe public static string GetAllSessions(string[] sessions) { string SessionSids = "SessionSids:0"; IntPtr pArray = Marshal.AllocHGlobal(0); int count = IPCast.GetSessionList(pArray, 0); if (count > 0) { pArray = Marshal.ReAllocHGlobal(pArray, new IntPtr(count * 4)); int ret = IPCast.GetSessionList(pArray, count); //获取会话列表 if (ret > 0) { uint *pSid = (uint *)pArray.ToPointer(); for (int i = 0; i < ret; i++) { uint sid = pSid[i]; SessionSids += sid.ToString(); SessionSids += ","; long size = Marshal.SizeOf(typeof(IPCast.SessionAttr)); IntPtr pSessions = Marshal.AllocHGlobal((int)new IntPtr(size)); if (IPCast.GetSessionStatus(sid, pSessions)) { IPCast.SessionAttr sessionAttr = (IPCast.SessionAttr)Marshal.PtrToStructure(pSessions, typeof(IPCast.SessionAttr)); string sinfo = "sid: " + sessionAttr.sid.ToString() + " name: " + sessionAttr.name + " status: " + sessionAttr.status.ToString() + " type: " + sessionAttr.type.ToString() + " Grade: " + sessionAttr.grade.ToString() + " t_play: " + sessionAttr.t_play.ToString() + " t_total: " + sessionAttr.t_total.ToString() + " iFile: " + sessionAttr.iFile.ToString(); sessions[i] = sinfo; } Marshal.FreeHGlobal(pSessions); } Marshal.FreeHGlobal(pArray); } } SessionSids.Trim(','); return(SessionSids); }