/// <summary> /// Unmarshals and deallocates an OPCHDA_ANNOTATION structure. /// </summary> internal static TsCHdaAnnotationValueCollection GetAnnotationValueCollection(OpcRcw.Hda.OPCHDA_ANNOTATION input, bool deallocate) { TsCHdaAnnotationValueCollection output = new TsCHdaAnnotationValueCollection(); output.ClientHandle = input.hClient; DateTime[] timestamps = Utilities.Interop.GetDateTimes(ref input.ftTimeStamps, input.dwNumValues, deallocate); string[] annotations = Utilities.Interop.GetUnicodeStrings(ref input.szAnnotation, input.dwNumValues, deallocate); DateTime[] creationTimes = Utilities.Interop.GetDateTimes(ref input.ftAnnotationTime, input.dwNumValues, deallocate); string[] users = Utilities.Interop.GetUnicodeStrings(ref input.szUser, input.dwNumValues, deallocate); for (int ii = 0; ii < input.dwNumValues; ii++) { TsCHdaAnnotationValue value = new TsCHdaAnnotationValue(); value.Timestamp = timestamps[ii]; value.Annotation = annotations[ii]; value.CreationTime = creationTimes[ii]; value.User = users[ii]; output.Add(value); } return(output); }
/// <summary> /// Unmarshals and deallocates an array of OPCHDA_ANNOTATION structures. /// </summary> internal static TsCHdaAnnotationValueCollection[] GetAnnotationValueCollections(ref IntPtr pInput, int count, bool deallocate) { TsCHdaAnnotationValueCollection[] output = null; if (pInput != IntPtr.Zero && count > 0) { output = new TsCHdaAnnotationValueCollection[count]; IntPtr pos = pInput; for (int ii = 0; ii < count; ii++) { output[ii] = GetAnnotationValueCollection(pos, deallocate); pos = (IntPtr)(pos.ToInt64() + Marshal.SizeOf(typeof(OpcRcw.Hda.OPCHDA_ANNOTATION))); } if (deallocate) { Marshal.FreeCoTaskMem(pInput); pInput = IntPtr.Zero; } } return(output); }
/// <summary> /// Returns the set of item values stored in the list control. /// </summary> public TsCHdaAnnotationValueCollection GetValues() { TsCHdaAnnotationValueCollection values = new TsCHdaAnnotationValueCollection(); foreach (ListViewItem listItem in ValuesLV.Items) { if (typeof(TsCHdaAnnotationValue).IsInstanceOfType(listItem.Tag)) { values.Add(listItem.Tag); } } return(values); }
/// <summary> /// Unmarshals and deallocates an OPCHDA_ANNOTATION structure. /// </summary> internal static TsCHdaAnnotationValueCollection GetAnnotationValueCollection(IntPtr pInput, bool deallocate) { TsCHdaAnnotationValueCollection output = null; if (pInput != IntPtr.Zero) { object item = Marshal.PtrToStructure(pInput, typeof(OpcRcw.Hda.OPCHDA_ANNOTATION)); output = GetAnnotationValueCollection((OpcRcw.Hda.OPCHDA_ANNOTATION)item, deallocate); if (deallocate) { Marshal.DestroyStructure(pInput, typeof(OpcRcw.Hda.OPCHDA_ANNOTATION)); } } return(output); }
/// <summary> /// Initializes the control with a set of items. /// </summary> public void Initialize(TsCHdaServer server, TsCHdaAnnotationValueCollection values) { m_server = server; m_item = values; ValuesLV.Items.Clear(); if (values != null) { // add item values to list. foreach (TsCHdaAnnotationValue value in values) { AddListItem(value, -1); } // adjust the list view columns to fit the data. AdjustColumns(); } }
/// <summary> /// Called when an asynchronous read annotations request completes. /// </summary> public void OnReadAnnotations( int dwTransactionID, int hrStatus, int dwNumItems, OPCHDA_ANNOTATION[] pAnnotationValues, int[] phrErrors) { try { lock (this) { // lookup request transaction. Request request = (Request)m_requests[dwTransactionID]; if (request == null) { return; } // unmarshal results. TsCHdaAnnotationValueCollection[] results = new TsCHdaAnnotationValueCollection[pAnnotationValues.Length]; for (int ii = 0; ii < pAnnotationValues.Length; ii++) { results[ii] = Interop.GetAnnotationValueCollection(pAnnotationValues[ii], false); results[ii].ServerHandle = pAnnotationValues[ii].hClient; results[ii].Result = Technosoftware.DaAeHdaClient.Utilities.Interop.GetResultID(phrErrors[ii]); } // invoke callback - remove request if all results arrived. if (request.InvokeCallback(results)) { m_requests.Remove(request.RequestID); } } } catch (Exception exception) { HandleException(dwTransactionID, exception); } }