public virtual BrowseElement[] BrowseNext(ref Opc.Da.BrowsePosition position) { lock (this) { if (base.m_server == null) { throw new NotConnectedException(); } if ((position == null) || (position.GetType() != typeof(OpcCom.Da.BrowsePosition))) { throw new BrowseCannotContinueException(); } OpcCom.Da.BrowsePosition position2 = (OpcCom.Da.BrowsePosition)position; if (((position2 == null) || (position2.ContinuationPoint == null)) || (position2.ContinuationPoint == "")) { throw new BrowseCannotContinueException(); } int pdwCount = 0; int pbMoreElements = 0; ItemIdentifier itemID = ((OpcCom.Da.BrowsePosition)position).ItemID; BrowseFilters filters = ((OpcCom.Da.BrowsePosition)position).Filters; IntPtr pszContinuationPoint = Marshal.StringToCoTaskMemUni(position2.ContinuationPoint); IntPtr zero = IntPtr.Zero; try { ((IOPCBrowse)base.m_server).Browse(((itemID != null) && (itemID.ItemName != null)) ? itemID.ItemName : "", ref pszContinuationPoint, filters.MaxElementsReturned, OpcCom.Da.Interop.GetBrowseFilter(filters.BrowseFilter), (filters.ElementNameFilter != null) ? filters.ElementNameFilter : "", (filters.VendorFilter != null) ? filters.VendorFilter : "", filters.ReturnAllProperties ? 1 : 0, filters.ReturnPropertyValues ? 1 : 0, (filters.PropertyIDs != null) ? filters.PropertyIDs.Length : 0, OpcCom.Da.Interop.GetPropertyIDs(filters.PropertyIDs), out pbMoreElements, out pdwCount, out zero); } catch (Exception exception) { throw OpcCom.Interop.CreateException("IOPCBrowse.BrowseNext", exception); } BrowseElement[] elements = OpcCom.Da.Interop.GetBrowseElements(ref zero, pdwCount, true); position2.ContinuationPoint = Marshal.PtrToStringUni(pszContinuationPoint); Marshal.FreeCoTaskMem(pszContinuationPoint); if ((pbMoreElements == 0) && ((position2.ContinuationPoint == null) || (position2.ContinuationPoint == ""))) { position = null; } this.ProcessResults(elements, filters.PropertyIDs); return(elements); } }
public virtual BrowseElement[] Browse(ItemIdentifier itemID, BrowseFilters filters, out Opc.Da.BrowsePosition position) { if (filters == null) { throw new ArgumentNullException("filters"); } lock (this) { if (base.m_server == null) { throw new NotConnectedException(); } position = null; int pdwCount = 0; int pbMoreElements = 0; IntPtr zero = IntPtr.Zero; IntPtr ppBrowseElements = IntPtr.Zero; try { ((IOPCBrowse)base.m_server).Browse(((itemID != null) && (itemID.ItemName != null)) ? itemID.ItemName : "", ref zero, filters.MaxElementsReturned, OpcCom.Da.Interop.GetBrowseFilter(filters.BrowseFilter), (filters.ElementNameFilter != null) ? filters.ElementNameFilter : "", (filters.VendorFilter != null) ? filters.VendorFilter : "", filters.ReturnAllProperties ? 1 : 0, filters.ReturnPropertyValues ? 1 : 0, (filters.PropertyIDs != null) ? filters.PropertyIDs.Length : 0, OpcCom.Da.Interop.GetPropertyIDs(filters.PropertyIDs), out pbMoreElements, out pdwCount, out ppBrowseElements); } catch (Exception exception) { throw OpcCom.Interop.CreateException("IOPCBrowse.Browse", exception); } BrowseElement[] elements = OpcCom.Da.Interop.GetBrowseElements(ref ppBrowseElements, pdwCount, true); string continuationPoint = Marshal.PtrToStringUni(zero); Marshal.FreeCoTaskMem(zero); if ((pbMoreElements != 0) || ((continuationPoint != null) && (continuationPoint != ""))) { position = new OpcCom.Da.BrowsePosition(itemID, filters, continuationPoint); } this.ProcessResults(elements, filters.PropertyIDs); return(elements); } }
//====================================================================== // BrowseNext /// <summary> /// Continues a browse operation with previously specified search criteria. /// </summary> /// <param name="position">An object containing the browse operation state information.</param> /// <returns>The set of elements found.</returns> public virtual BrowseElement[] BrowseNext(ref Opc.Da.BrowsePosition position) { lock (this) { if (m_server == null) { throw new NotConnectedException(); } // check for valid position object. if (position == null || position.GetType() != typeof(OpcCom.Da.BrowsePosition)) { throw new BrowseCannotContinueException(); } OpcCom.Da.BrowsePosition pos = (OpcCom.Da.BrowsePosition)position; // check for valid continuation point. if (pos == null || pos.ContinuationPoint == null || pos.ContinuationPoint == "") { throw new BrowseCannotContinueException(); } // initialize arguments. int count = 0; int moreElements = 0; ItemIdentifier itemID = ((BrowsePosition)position).ItemID; BrowseFilters filters = ((BrowsePosition)position).Filters; IntPtr pContinuationPoint = Marshal.StringToCoTaskMemUni(pos.ContinuationPoint); IntPtr pElements = IntPtr.Zero; // invoke COM method. try { ((IOPCBrowse)m_server).Browse( (itemID != null && itemID.ItemName != null)?itemID.ItemName:"", ref pContinuationPoint, filters.MaxElementsReturned, OpcCom.Da.Interop.GetBrowseFilter(filters.BrowseFilter), (filters.ElementNameFilter != null)?filters.ElementNameFilter:"", (filters.VendorFilter != null)?filters.VendorFilter:"", (filters.ReturnAllProperties)?1:0, (filters.ReturnPropertyValues)?1:0, (filters.PropertyIDs != null)?filters.PropertyIDs.Length:0, OpcCom.Da.Interop.GetPropertyIDs(filters.PropertyIDs), out moreElements, out count, out pElements); } catch (Exception e) { throw OpcCom.Interop.CreateException("IOPCBrowse.BrowseNext", e); } // unmarshal results. BrowseElement[] elements = OpcCom.Da.Interop.GetBrowseElements(ref pElements, count, true); pos.ContinuationPoint = Marshal.PtrToStringUni(pContinuationPoint); Marshal.FreeCoTaskMem(pContinuationPoint); // check if more no results exist. if (moreElements == 0 && (pos.ContinuationPoint == null || pos.ContinuationPoint == "")) { position = null; } // process results. ProcessResults(elements, filters.PropertyIDs); return(elements); } }
//====================================================================== // Browse /// <summary> /// Fetches the children of a branch that meet the filter criteria. /// </summary> /// <param name="itemID">The identifier of branch which is the target of the search.</param> /// <param name="filters">The filters to use to limit the set of child elements returned.</param> /// <param name="position">An object used to continue a browse that could not be completed.</param> /// <returns>The set of elements found.</returns> public virtual BrowseElement[] Browse( ItemIdentifier itemID, BrowseFilters filters, out Opc.Da.BrowsePosition position) { if (filters == null) { throw new ArgumentNullException("filters"); } lock (this) { if (m_server == null) { throw new NotConnectedException(); } position = null; // initialize arguments. int count = 0; int moreElements = 0; IntPtr pContinuationPoint = IntPtr.Zero; IntPtr pElements = IntPtr.Zero; // invoke COM method. try { ((IOPCBrowse)m_server).Browse( (itemID != null && itemID.ItemName != null)?itemID.ItemName:"", ref pContinuationPoint, filters.MaxElementsReturned, OpcCom.Da.Interop.GetBrowseFilter(filters.BrowseFilter), (filters.ElementNameFilter != null)?filters.ElementNameFilter:"", (filters.VendorFilter != null)?filters.VendorFilter:"", (filters.ReturnAllProperties)?1:0, (filters.ReturnPropertyValues)?1:0, (filters.PropertyIDs != null)?filters.PropertyIDs.Length:0, OpcCom.Da.Interop.GetPropertyIDs(filters.PropertyIDs), out moreElements, out count, out pElements); } catch (Exception e) { throw OpcCom.Interop.CreateException("IOPCBrowse.Browse", e); } // unmarshal results. BrowseElement[] elements = OpcCom.Da.Interop.GetBrowseElements(ref pElements, count, true); string continuationPoint = Marshal.PtrToStringUni(pContinuationPoint); Marshal.FreeCoTaskMem(pContinuationPoint); // check if more results exist. if (moreElements != 0 || (continuationPoint != null && continuationPoint != "")) { // allocate new browse position object. position = new OpcCom.Da.BrowsePosition(itemID, filters, continuationPoint); } // process results. ProcessResults(elements, filters.PropertyIDs); return(elements); } }