Пример #1
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();
        }
Пример #2
0
        private SERVERPARAM[] GetServerParam(IOPCServerList svrList, Guid catid)
        {
            // get list of servers in the specified specification.
            IEnumGUID enumeratorObject = null; //enumeratorObject has been changed from object to IEnumGUID

            svrList.EnumClassesOfCategories(
                1,
                new Guid[] { catid },
                0,
                null,
                out enumeratorObject);

            ArrayList prms = new ArrayList();

            IEnumGUID enumerator = enumeratorObject;

            int fetched = 0;

            Guid[]      buffer = new Guid[100];
            SERVERPARAM prm;

            do
            {
                IntPtr _buffer = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(Guid)) * 100);                //alloc
                try
                {
                    enumerator.Next(100, buffer, out fetched);

                    IntPtr pPos = _buffer;
                    for (int i = 0; i < fetched; i++)
                    {
                        prm.clsid = (Guid)Marshal.PtrToStructure(pPos, typeof(Guid));
                        pPos      = (IntPtr)(pPos.ToInt64() + Marshal.SizeOf(typeof(Guid)));
                        //prm.clsid = bufferPtr[i];
                        svrList.GetClassDetails(
                            ref prm.clsid,
                            out prm.progID,
                            out prm.description);
                        prms.Add(prm);
                    }
                }
                catch
                {
                    break;
                }
                finally
                {
                    Marshal.FreeCoTaskMem(_buffer);//alloc�� ���� Ǯ��д�.
                }
            }while (fetched > 0);

            return((SERVERPARAM[])prms.ToArray(typeof(SERVERPARAM)));
        }
Пример #3
0
        /*------------------------------------------------------
        *  Get Server Parameter
        *
        *  ------------------------------------------------------*/
        private SERVERPARAM[] GetServerParam(IOPCServerList svrList, Guid catid, out int nServerCnt)
        {
            // Get Server List
            IEnumGUID enumeratorObject = null;

            svrList.EnumClassesOfCategories(1, new Guid[] { catid }, 0, null, out enumeratorObject);

            ArrayList prms = new ArrayList();

            IEnumGUID enumerator = enumeratorObject;

            int fetched = 0;

            Guid[]      buffer = new Guid[100];
            SERVERPARAM prm;

            nServerCnt = 0;
            do
            {
                IntPtr _buffer = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(Guid)) * 100);
                try
                {
                    enumerator.Next(100, buffer, out fetched);
                    IntPtr pPos = _buffer;
                    for (int i = 0; i < fetched; i++)
                    {
                        prm.clsid       = (Guid)Marshal.PtrToStructure(pPos, typeof(Guid));
                        pPos            = (IntPtr)(pPos.ToInt64() + Marshal.SizeOf(typeof(Guid)));
                        prm.progID      = "";
                        prm.description = "";
                        svrList.GetClassDetails(ref prm.clsid, out prm.progID, out prm.description);
                        prms.Add(prm);
                        nServerCnt++;
                    }
                }
                catch
                {
                    break;
                }
                finally
                {
                    Marshal.FreeCoTaskMem(_buffer);
                }
            }while (fetched > 0);

            return((SERVERPARAM[])prms.ToArray(typeof(SERVERPARAM)));
        }
Пример #4
0
        // Token: 0x0600000A RID: 10 RVA: 0x000024D4 File Offset: 0x000006D4
        private DxpSimpleClass.SERVERPARAM[] GetServerParam(IOPCServerList svrList, Guid catid, out int nServerCnt)
        {
            IEnumGUID enumGUID = null;

            svrList.EnumClassesOfCategories(1, new Guid[]
            {
                catid
            }, 0, null, out enumGUID);
            ArrayList arrayList = new ArrayList();
            int       num       = 0;

            Guid[] array = new Guid[100];
            nServerCnt = 0;
            do
            {
                try
                {
                    enumGUID.Next(array.Length, array, out num);
                    for (int i = 0; i < num; i++)
                    {
                        DxpSimpleClass.SERVERPARAM serverparam;
                        serverparam.clsid = array[i];
                        svrList.GetClassDetails(ref serverparam.clsid, out serverparam.progID, out serverparam.description);
                        arrayList.Add(serverparam);
                        nServerCnt++;
                    }
                }
                catch
                {
                    break;
                }
            }while (num > 0);
            Marshal.ReleaseComObject(enumGUID);
            enumGUID = null;
            return((DxpSimpleClass.SERVERPARAM[])arrayList.ToArray(typeof(DxpSimpleClass.SERVERPARAM)));
        }
Пример #5
0
        public void ListAll(Guid catid,out OpcServers[] serverslist)
        {
            serverslist = null;
             Dispose();
             Guid guid = new Guid("13486D51-4821-11D2-A494-3CB306C10000");
             Type typeoflist = Type.GetTypeFromCLSID(guid);
             OPCListObj = Activator.CreateInstance(typeoflist);

             ifList = (IOPCServerList)OPCListObj;
             if (ifList == null)
            Marshal.ThrowExceptionForHR(HRESULTS.E_ABORT);

             ifList.EnumClassesOfCategories(1,ref catid,0,ref catid,out EnumObj);
             if (EnumObj == null)
            Marshal.ThrowExceptionForHR(HRESULTS.E_ABORT);

             ifEnum = (IEnumGUID)EnumObj;
             if (ifEnum == null)
            Marshal.ThrowExceptionForHR(HRESULTS.E_ABORT);

             int maxcount = 300;
             IntPtr ptrGuid = Marshal.AllocCoTaskMem(maxcount * 16);
             int count = 0;
             ifEnum.Next(maxcount,ptrGuid,out count);
             if (count < 1) { Marshal.FreeCoTaskMem(ptrGuid); return; }

             serverslist = new OpcServers[count];

             byte[] guidbin = new byte[16];
             int runGuid = (int)ptrGuid;
             for (int i = 0; i < count; i++) {
            serverslist[i] = new OpcServers();
            Marshal.Copy((IntPtr)runGuid,guidbin,0,16);
            serverslist[i].ClsID = new Guid(guidbin);
            ifList.GetClassDetails(ref serverslist[i].ClsID,
                              out serverslist[i].ProgID,out serverslist[i].ServerName);
            runGuid += 16;
            }

             Marshal.FreeCoTaskMem(ptrGuid);
             Dispose();
        }
 public void GetClassDetails(ref Guid clsid, out string progID, out string userType)
 {
     ifSrvList.GetClassDetails(ref clsid, out progID, out userType);
 }
Пример #7
0
        /// <summary>
        /// List all
        /// </summary>
        /// <param name="catid">Catid</param>
        public static OpcServerDefinition[] ListAll(Guid catid)
        {
            OpcServerDefinition[] serverslist = new OpcServerDefinition[0];
            object enumObj    = null;
            Type   typeOfList = Type.GetTypeFromCLSID(OpcServerListGuid);
            object listObj    = Activator.CreateInstance(typeOfList);

            try
            {
                IOPCServerList opcServerList = listObj as IOPCServerList;
                if (opcServerList == null)
                {
                    Marshal.ThrowExceptionForHR(HRESULTS.E_ABORT);
                }

                opcServerList.EnumClassesOfCategories(1, ref catid, 0, ref catid, out enumObj);
                if (enumObj == null)
                {
                    Marshal.ThrowExceptionForHR(HRESULTS.E_ABORT);
                }

                IEnumGUID ifEnum = enumObj as IEnumGUID;
                if (ifEnum == null)
                {
                    Marshal.ThrowExceptionForHR(HRESULTS.E_ABORT);
                }

                const int maxcount = 300;
                IntPtr    ptrGuid  = Marshal.AllocCoTaskMem(maxcount * 16);
                ifEnum.Next(maxcount, ptrGuid, out int count);
                if (count < 1)
                {
                    Marshal.FreeCoTaskMem(ptrGuid);
                    return(serverslist);
                }

                serverslist = new OpcServerDefinition[count];

                byte[] guidbin = new byte[16];
                int    runGuid = (int)ptrGuid;
                for (int i = 0; i < count; i++)
                {
                    serverslist[i] = new OpcServerDefinition();
                    Marshal.Copy((IntPtr)runGuid, guidbin, 0, 16);
                    serverslist[i].ClsID = new Guid(guidbin);
                    opcServerList.GetClassDetails(ref serverslist[i].ClsID,
                                                  out serverslist[i].ProgID, out serverslist[i].Name);
                    runGuid += 16;
                }

                Marshal.FreeCoTaskMem(ptrGuid);
            }
            finally
            {
                if (!(enumObj == null))
                {
                    Marshal.ReleaseComObject(enumObj);
                }
                if (!(listObj == null))
                {
                    Marshal.ReleaseComObject(listObj);
                }
            }
            return(serverslist);
        }