Ejemplo n.º 1
0
        /// <summary>
        /// Unmarshals and deallocates an array of OPCHDA_ATTRIBUTE structures.
        /// </summary>
        internal static TsCHdaAttributeValueCollection[] GetAttributeValueCollections(ref IntPtr pInput, int count, bool deallocate)
        {
            TsCHdaAttributeValueCollection[] output = null;

            if (pInput != IntPtr.Zero && count > 0)
            {
                output = new TsCHdaAttributeValueCollection[count];

                IntPtr pos = pInput;

                for (int ii = 0; ii < count; ii++)
                {
                    output[ii] = GetAttributeValueCollection(pos, deallocate);
                    pos        = (IntPtr)(pos.ToInt64() + Marshal.SizeOf(typeof(OpcRcw.Hda.OPCHDA_ATTRIBUTE)));
                }

                if (deallocate)
                {
                    Marshal.FreeCoTaskMem(pInput);
                    pInput = IntPtr.Zero;
                }
            }

            return(output);
        }
        /// <summary>
        /// Called when an asynchronous read attributes request completes.
        /// </summary>
        public void OnReadAttributeComplete(
            int dwTransactionID,
            int hrStatus,
            int hClient,
            int dwNumItems,
            OPCHDA_ATTRIBUTE[] pAttributeValues,
            int[]              phrErrors)
        {
            try
            {
                lock (this)
                {
                    // lookup request transaction.
                    Request request = (Request)m_requests[dwTransactionID];

                    if (request == null)
                    {
                        return;
                    }

                    // create item object to collect results.
                    TsCHdaItemAttributeCollection item = new TsCHdaItemAttributeCollection();
                    item.ServerHandle = hClient;

                    // unmarshal results.
                    TsCHdaAttributeValueCollection[] results = new TsCHdaAttributeValueCollection[pAttributeValues.Length];

                    for (int ii = 0; ii < pAttributeValues.Length; ii++)
                    {
                        results[ii] = Interop.GetAttributeValueCollection(pAttributeValues[ii], false);

                        results[ii].Result = Utilities.Interop.GetResultId(phrErrors[ii]);

                        item.Add(results[ii]);
                    }

                    // invoke callback - remove request if all results arrived.
                    if (request.InvokeCallback(item))
                    {
                        m_requests.Remove(request.RequestID);
                    }
                }
            }
            catch (Exception exception)
            {
                HandleException(dwTransactionID, exception);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Unmarshals and deallocates an OPCHDA_ATTRIBUTE structure.
        /// </summary>
        internal static TsCHdaAttributeValueCollection GetAttributeValueCollection(IntPtr pInput, bool deallocate)
        {
            TsCHdaAttributeValueCollection output = null;

            if (pInput != IntPtr.Zero)
            {
                object item = Marshal.PtrToStructure(pInput, typeof(OpcRcw.Hda.OPCHDA_ATTRIBUTE));

                output = GetAttributeValueCollection((OpcRcw.Hda.OPCHDA_ATTRIBUTE)item, deallocate);

                if (deallocate)
                {
                    Marshal.DestroyStructure(pInput, typeof(OpcRcw.Hda.OPCHDA_ATTRIBUTE));
                }
            }

            return(output);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Unmarshals and deallocates an OPCHDA_ATTRIBUTE structure.
        /// </summary>
        internal static TsCHdaAttributeValueCollection GetAttributeValueCollection(OpcRcw.Hda.OPCHDA_ATTRIBUTE input, bool deallocate)
        {
            TsCHdaAttributeValueCollection output = new TsCHdaAttributeValueCollection();

            output.AttributeID = input.dwAttributeID;

            object[]   values     = Com.Interop.GetVARIANTs(ref input.vAttributeValues, input.dwNumValues, deallocate);
            DateTime[] timestamps = Utilities.Interop.GetDateTimes(ref input.ftTimeStamps, input.dwNumValues, deallocate);

            for (int ii = 0; ii < input.dwNumValues; ii++)
            {
                TsCHdaAttributeValue value = new TsCHdaAttributeValue();

                value.Value     = values[ii];
                value.Timestamp = timestamps[ii];

                output.Add(value);
            }

            return(output);
        }