Ejemplo n.º 1
0
 public OPCServerLister()
 {
     m_OPCListObj = null;
     m_IfList     = null;
     m_EnumObj    = null;
     m_IfEnum     = null;
 }
Ejemplo n.º 2
0
        public void ListAllOnMachine(Guid p_CatID, string p_MachineName, out OPCServerInfo[] p_ServersList)
        {
            p_ServersList = null;

            Dispose();

            Guid l_Guid       = new Guid("13486D51-4821-11D2-A494-3CB306C10000");
            Type l_TypeOfList = Type.GetTypeFromCLSID(l_Guid, p_MachineName);

            m_OPCListObj = Activator.CreateInstance(l_TypeOfList);

            m_IfList = (IOPCServerList)m_OPCListObj;
            if (m_IfList == null)
            {
                Marshal.ThrowExceptionForHR(HResults.E_ABORT);
            }

            m_IfList.EnumClassesOfCategories(1, ref p_CatID, 0, ref p_CatID, out m_EnumObj);
            if (m_EnumObj == null)
            {
                Marshal.ThrowExceptionForHR(HResults.E_ABORT);
            }

            m_IfEnum = (IEnumGuid)m_EnumObj;
            if (m_IfEnum == null)
            {
                Marshal.ThrowExceptionForHR(HResults.E_ABORT);
            }

            int    l_MaxCount = 300;
            IntPtr l_PtrGuid  = Marshal.AllocCoTaskMem(l_MaxCount * 16);
            int    l_Count    = 0;

            m_IfEnum.Next(l_MaxCount, l_PtrGuid, out l_Count);
            if (l_Count < 1)
            {
                Marshal.FreeCoTaskMem(l_PtrGuid);
                return;
            }

            p_ServersList = new OPCServerInfo[l_Count];

            byte[] l_GuidBin = new byte[16];
            int    l_RunGuid = (int)l_PtrGuid;

            for (int i = 0; i < l_Count; ++i)
            {
                p_ServersList[i] = new OPCServerInfo();
                Marshal.Copy((IntPtr)l_RunGuid, l_GuidBin, 0, 16);
                p_ServersList[i].ClsID = new Guid(l_GuidBin);
                m_IfList.GetClassDetails(ref p_ServersList[i].ClsID, out p_ServersList[i].ProgID,
                                         out p_ServersList[i].ServerName);
                l_RunGuid += 16;
            }

            Marshal.FreeCoTaskMem(l_PtrGuid);
            Dispose();
        }
Ejemplo n.º 3
0
        public void Dispose()
        {
            m_IfEnum = null;
            if (m_EnumObj != null)
            {
                Marshal.ReleaseComObject(m_EnumObj);
                m_EnumObj = null;
            }

            m_IfList = null;
            if (m_OPCListObj != null)
            {
                Marshal.ReleaseComObject(m_OPCListObj);
                m_OPCListObj = null;
            }
        }