コード例 #1
0
 public OPCServerLister()
 {
     m_OPCListObj = null;
     m_IfList     = null;
     m_EnumObj    = null;
     m_IfEnum     = null;
 }
コード例 #2
0
        public OpcServerBrowser()
        {
            this.CLSID_OPCEnum = new Guid("{13486D51-4821-11D2-A494-3CB306C10000}");
            Type typeFromCLSID = Type.GetTypeFromCLSID(this.CLSID_OPCEnum);

            this.ifSrvList = (IOPCServerList)Activator.CreateInstance(typeFromCLSID);
        }
コード例 #3
0
        /*------------------------------------------------------
        *  Browse Server
        *
        *  ------------------------------------------------------*/
        private SERVERPARAM[] BrowseServer(DEF_OPCDA opcDaVer, string hostName, out int nServerCnt)
        {
            nServerCnt = 0;
            try
            {
                // initialize
                IOPCServerList svrList = (IOPCServerList)CreateInstance(CLSID_SERVERLIST, hostName);

                // convert to GUID
                Guid catid;
                switch (opcDaVer)
                {
                case DEF_OPCDA.VER_30:
                    catid = CLSID_DA_30;
                    break;

                case DEF_OPCDA.VER_10:
                case DEF_OPCDA.VER_20:
                default:
                    catid = CLSID_DA_20;
                    break;
                }

                // Get class id
                SERVERPARAM[] svrPrms = GetServerParam(svrList, catid, out nServerCnt);

                return(svrPrms);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString(), "BrowseServer");
                return(null);
            }
        }
コード例 #4
0
ファイル: DxpSimpleClass.cs プロジェクト: kumo203/YascPcDcs
        // Token: 0x06000009 RID: 9 RVA: 0x00002470 File Offset: 0x00000670
        private DxpSimpleClass.SERVERPARAM[] BrowseServer(string sNodeName, out int nServerCnt)
        {
            nServerCnt = 0;
            IOPCServerList iopcserverList = (IOPCServerList)DxpSimpleClass.CreateInstance(DxpSimpleClass.CLSID_SERVERLIST, sNodeName);

            DxpSimpleClass.SERVERPARAM[] result;
            try
            {
                Guid clsid_DA_ = DxpSimpleClass.CLSID_DA_30;
                DxpSimpleClass.SERVERPARAM[] serverParam = this.GetServerParam(iopcserverList, clsid_DA_, out nServerCnt);
                result = serverParam;
            }
            catch (Exception ex)
            {
#if DEBUG
                Debug.WriteLine(ex);
#endif
                result = null;
            }
            finally
            {
                Marshal.ReleaseComObject(iopcserverList);
                iopcserverList = null;
            }
            return(result);
        }
コード例 #5
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();
        }
コード例 #6
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)));
        }
コード例 #7
0
        /*------------------------------------------------------
        *  Connect OPC Server
        *
        *  (ret)   True    OK
        *                  False   NG
        *  ------------------------------------------------------*/
        public bool Connect(DEF_OPCDA OpcdaVer, string sNodeName, string sSvrName, string sGrpName, int iUpdateRate)
        {
            if (m_OPCServer != null)
            {
                return(true);
            }

            m_OpcdaVer = OpcdaVer;
            try
            {
                // instantiate the serverlist using CoCreateInstanceEx.
                IOPCServerList svrList = (IOPCServerList)CreateInstance(CLSID_SERVERLIST, sNodeName);
                Guid           clsidList;
                svrList.CLSIDFromProgID(sSvrName, out clsidList);
                m_OPCServer = (IOPCServer)CreateInstance(clsidList, sNodeName);
                if (m_OPCServer != null)
                {
                    // 2011/11/14 シャットダウンイベントを受けれるようにする	(
                    IConnectionPointContainer OPCConnPointCntnr = (IConnectionPointContainer)m_OPCServer;
                    Guid guidShutdown = Marshal.GenerateGuidForType(typeof(IOPCShutdown));
                    OPCConnPointCntnr.FindConnectionPoint(ref guidShutdown, out m_OpcShutdownConnectionPoint);

                    m_OpcShutdownConnectionPoint.Advise(this, out m_iShutdownConnectionCookie);
                    // 2011/11/14 シャットダウンイベントを受けれるようにする	)

                    if (AddGroup(sGrpName, iUpdateRate))
                    {
                        IOPCCommon m_com = (IOPCCommon)m_OPCServer;
                        m_com.SetClientName("TestClient");

                        m_bConnect = true;

                        Marshal.ReleaseComObject(svrList);                                      // 1.0.0.5 10/06/21 Kishimoto	Release Com Object
                        svrList = null;                                                         // 1.0.0.5 10/06/21 Kishimoto	Release Com Object

                        return(true);
                    }
                }

                Marshal.ReleaseComObject(svrList);                              // 1.0.0.5 10/06/21 Kishimoto	Release Com Object
                svrList = null;                                                 // 1.0.0.5 10/06/21 Kishimoto	Release Com Object

                MessageBox.Show("Cannot connect OPC Server.", "Connect");
                return(false);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString(), "Connect");
                return(false);
            }
        }
コード例 #8
0
 public OpcServerBrowser(string ComputerName)
 {
     this.CLSID_OPCEnum = new Guid("{13486D51-4821-11D2-A494-3CB306C10000}");
     if ((ComputerName != null) && (ComputerName != ""))
     {
         Type typeFromCLSID = Type.GetTypeFromCLSID(this.CLSID_OPCEnum, ComputerName);
         this.ifSrvList = (IOPCServerList)Activator.CreateInstance(typeFromCLSID);
     }
     else
     {
         Type typeFromCLSID = Type.GetTypeFromCLSID(this.CLSID_OPCEnum);
         this.ifSrvList = (IOPCServerList)Activator.CreateInstance(typeFromCLSID);
     }
 }
コード例 #9
0
        public void ListAllServer(Guid catid, out OPCServers[] serverslist)
        {
            serverslist = null;
            this.Dispose();
            Guid clsid         = new Guid("13486D51-4821-11D2-A494-3CB306C10000");
            Type typeFromCLSID = Type.GetTypeFromCLSID(clsid);

            this.OPCObjList          = Activator.CreateInstance(typeFromCLSID);
            this.interfaceServerList = (IOPCServerList)this.OPCObjList;
            if (this.interfaceServerList == null)
            {
                Marshal.ThrowExceptionForHR(-2147467260);
            }
            this.interfaceServerList.EnumClassesOfCategories(1, ref catid, 0, ref catid, out this.enumObject);
            if (this.enumObject == null)
            {
                Marshal.ThrowExceptionForHR(-2147467260);
            }
            this.interfaceEnumGUID = (IEnumGUID)this.enumObject;
            if (this.interfaceEnumGUID == null)
            {
                Marshal.ThrowExceptionForHR(-2147467260);
            }
            int    celt         = 300;
            IntPtr rgelt        = Marshal.AllocCoTaskMem(celt * 0x10);
            int    pceltFetched = 0;

            this.interfaceEnumGUID.Next(celt, rgelt, out pceltFetched);
            if (pceltFetched < 1)
            {
                Marshal.FreeCoTaskMem(rgelt);
            }
            else
            {
                serverslist = new OPCServers[pceltFetched];
                byte[] destination = new byte[0x10];
                int    num3        = (int)rgelt;
                for (int i = 0; i < pceltFetched; i++)
                {
                    serverslist[i] = new OPCServers();
                    Marshal.Copy((IntPtr)num3, destination, 0, 0x10);
                    serverslist[i].classID = new Guid(destination);
                    this.interfaceServerList.GetClassDetails(ref serverslist[i].classID, out serverslist[i].programID, out serverslist[i].serverName);
                    num3 += 0x10;
                }
                Marshal.FreeCoTaskMem(rgelt);
                this.Dispose();
            }
        }
コード例 #10
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;
            }
        }
コード例 #11
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)));
        }
コード例 #12
0
        public void Dispose()
        {
            int num;

            this.interfaceEnumGUID = null;
            if (this.enumObject != null)
            {
                num             = Marshal.ReleaseComObject(this.enumObject);
                this.enumObject = null;
            }
            this.interfaceServerList = null;
            if (this.OPCObjList != null)
            {
                num             = Marshal.ReleaseComObject(this.OPCObjList);
                this.OPCObjList = null;
            }
        }
コード例 #13
0
ファイル: DxpSimpleClass.cs プロジェクト: kumo203/YascPcDcs
        // Token: 0x06000005 RID: 5 RVA: 0x000020D4 File Offset: 0x000002D4
        public bool Connect(string sNodeName, string sServerName)
        {
            if (this.m_OPCServer != null)
            {
                return(true);
            }
            IOPCServerList iopcserverList = (IOPCServerList)DxpSimpleClass.CreateInstance(DxpSimpleClass.CLSID_SERVERLIST, sNodeName);
            bool           result;

            try
            {
                Guid clsid;
                iopcserverList.CLSIDFromProgID(sServerName, out clsid);
                this.m_OPCServer = (IOPCServer)DxpSimpleClass.CreateInstance(clsid, sNodeName);
                if (this.m_OPCServer != null)
                {
                    ((IOPCCommon)this.m_OPCServer).SetClientName("TestClient");
                    this.m_bConnect = true;
                    result          = true;
                }
                else
                {
                    result = false;
                }
            }
            catch (Exception ex)
            {
#if DEBUG
                Debug.WriteLine(ex);
#endif
                result = false;
            }
            finally
            {
                Marshal.ReleaseComObject(iopcserverList);
                iopcserverList = null;
            }
            return(result);
        }
コード例 #14
0
        /*------------------------------------------------------
        *  Browse OPC Server
        *
        *  (ret)   True    OK
        *                  False   NG
        *  ------------------------------------------------------*/
        private SERVERPARAM[] BrowseServer()
        {
            try
            {
                // instantiate the serverlist using CoCreateInstanceEx.
                IOPCServerList svrList = (IOPCServerList)CreateInstance(CLSID_SERVERLIST, null);

                // convert the interface version to a guid.
                Guid catid;
                switch (m_OpcdaVer)
                {
                case DEF_OPCDA.VER_30:
                    catid = CLSID_DA_30;
                    break;

                case DEF_OPCDA.VER_10:
                case DEF_OPCDA.VER_20:
                default:
                    catid = CLSID_DA_20;
                    break;
                }

                // read clsids.
                SERVERPARAM[] svrPrms = GetServerParam(svrList, catid);

//				// release enumerator object.
//				OpcCom.Interop.ReleaseServer(enumerator);
//				enumerator = null;

                return(svrPrms);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString(), "BrowseServer");
                return(null);
            }
        }
コード例 #15
0
ファイル: DxpSimpleClass.cs プロジェクト: kumo203/YascPcDcs
        // 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)));
        }
コード例 #16
0
 public OpcServerList()
 {
     OPCListObj = null;
      ifList = null;
      EnumObj = null;
      ifEnum = null;
 }
コード例 #17
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);
        }
コード例 #18
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();
        }
コード例 #19
0
 public void Dispose()
 {
     ifEnum = null;
      if (!(EnumObj == null)) {
     int rc = Marshal.ReleaseComObject(EnumObj);
     EnumObj = null;
     }
      ifList = null;
      if (!(OPCListObj == null)) {
     int rc = Marshal.ReleaseComObject(OPCListObj);
     OPCListObj = null;
     }
 }