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(); }
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))); }
/*------------------------------------------------------ * 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))); }
// 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))); }
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); }
/// <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); }