Opc.Ua.Com.Client.ComDaGroup.GetItemValues C# (CSharp) Method

GetItemValues() static private method

Unmarshals and deallocates a OPCITEMSTATE structures.
static private GetItemValues ( IntPtr &pInput, int count, bool deallocate ) : DaValue[]
pInput System.IntPtr
count int
deallocate bool
return DaValue[]
        internal static DaValue[] GetItemValues(ref IntPtr pInput, int count, bool deallocate)
        {
            DaValue[] output = null;

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

                IntPtr pos = pInput;

                for (int ii = 0; ii < count; ii++)
                {
                    OpcRcw.Da.OPCITEMSTATE result = (OpcRcw.Da.OPCITEMSTATE)Marshal.PtrToStructure(pos, typeof(OpcRcw.Da.OPCITEMSTATE));

                    DaValue value = new DaValue();

                    value.Value = ComUtils.ProcessComValue(result.vDataValue);
                    value.Quality = result.wQuality;
                    value.Timestamp = ComUtils.GetDateTime(result.ftTimeStamp);

                    output[ii] = value;

                    if (deallocate)
                    {
                        Marshal.DestroyStructure(pos, typeof(OpcRcw.Da.OPCITEMSTATE));
                    }

                    pos = (IntPtr)(pos.ToInt32() + Marshal.SizeOf(typeof(OpcRcw.Da.OPCITEMSTATE)));
                }

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

            return output;
        }

Same methods

ComDaGroup::GetItemValues ( int dwCount, object pvValues, short pwQualities, System pftTimeStamps, int pErrors ) : DaValue[]

Usage Example

Ejemplo n.º 1
0
        /// <summary>
        /// Called when an asynchronous read operation completes.
        /// </summary>
        public void OnReadComplete(
            int dwTransid,
            int hGroup,
            int hrMasterquality,
            int hrMastererror,
            int dwCount,
            int[]                phClientItems,
            object[]             pvValues,
            short[]              pwQualities,
            System.Runtime.InteropServices.ComTypes.FILETIME[] pftTimeStamps,
            int[]                pErrors)
        {
            try
            {
                // unmarshal item values.
                DaValue[] values = ComDaGroup.GetItemValues(
                    dwCount,
                    pvValues,
                    pwQualities,
                    pftTimeStamps,
                    pErrors);

                // invoke the callback.
                m_group.OnReadComplete(dwTransid, phClientItems, values);
            }
            catch (Exception e)
            {
                Utils.Trace(e, "Unexpected error processing OnReadComplete callback.");
            }
        }