Exemple #1
0
        internal static Condition[] GetConditions(ref IntPtr pInput, int count, bool deallocate)
        {
            Condition[] array = null;
            if (pInput != IntPtr.Zero && count > 0)
            {
                array = new Condition[count];
                IntPtr ptr = pInput;
                for (int i = 0; i < count; i++)
                {
                    OPCCONDITIONSTATE oPCCONDITIONSTATE = (OPCCONDITIONSTATE)Marshal.PtrToStructure(ptr, typeof(OPCCONDITIONSTATE));
                    array[i]                                = new Condition();
                    array[i].State                          = oPCCONDITIONSTATE.wState;
                    array[i].Quality                        = new Quality(oPCCONDITIONSTATE.wQuality);
                    array[i].Comment                        = oPCCONDITIONSTATE.szComment;
                    array[i].AcknowledgerID                 = oPCCONDITIONSTATE.szAcknowledgerID;
                    array[i].CondLastActive                 = OpcCom.Interop.GetFILETIME(Convert(oPCCONDITIONSTATE.ftCondLastActive));
                    array[i].CondLastInactive               = OpcCom.Interop.GetFILETIME(Convert(oPCCONDITIONSTATE.ftCondLastInactive));
                    array[i].SubCondLastActive              = OpcCom.Interop.GetFILETIME(Convert(oPCCONDITIONSTATE.ftSubCondLastActive));
                    array[i].LastAckTime                    = OpcCom.Interop.GetFILETIME(Convert(oPCCONDITIONSTATE.ftLastAckTime));
                    array[i].ActiveSubCondition.Name        = oPCCONDITIONSTATE.szActiveSubCondition;
                    array[i].ActiveSubCondition.Definition  = oPCCONDITIONSTATE.szASCDefinition;
                    array[i].ActiveSubCondition.Severity    = oPCCONDITIONSTATE.dwASCSeverity;
                    array[i].ActiveSubCondition.Description = oPCCONDITIONSTATE.szASCDescription;
                    string[] unicodeStrings  = OpcCom.Interop.GetUnicodeStrings(ref oPCCONDITIONSTATE.pszSCNames, oPCCONDITIONSTATE.dwNumSCs, deallocate);
                    int[]    int32s          = OpcCom.Interop.GetInt32s(ref oPCCONDITIONSTATE.pdwSCSeverities, oPCCONDITIONSTATE.dwNumSCs, deallocate);
                    string[] unicodeStrings2 = OpcCom.Interop.GetUnicodeStrings(ref oPCCONDITIONSTATE.pszSCDefinitions, oPCCONDITIONSTATE.dwNumSCs, deallocate);
                    string[] unicodeStrings3 = OpcCom.Interop.GetUnicodeStrings(ref oPCCONDITIONSTATE.pszSCDescriptions, oPCCONDITIONSTATE.dwNumSCs, deallocate);
                    array[i].SubConditions.Clear();
                    if (oPCCONDITIONSTATE.dwNumSCs > 0)
                    {
                        for (int j = 0; j < unicodeStrings.Length; j++)
                        {
                            SubCondition subCondition = new SubCondition();
                            subCondition.Name        = unicodeStrings[j];
                            subCondition.Severity    = int32s[j];
                            subCondition.Definition  = unicodeStrings2[j];
                            subCondition.Description = unicodeStrings3[j];
                            array[i].SubConditions.Add(subCondition);
                        }
                    }

                    object[] vARIANTs = OpcCom.Interop.GetVARIANTs(ref oPCCONDITIONSTATE.pEventAttributes, oPCCONDITIONSTATE.dwNumEventAttrs, deallocate);
                    int[]    int32s2  = OpcCom.Interop.GetInt32s(ref oPCCONDITIONSTATE.pErrors, oPCCONDITIONSTATE.dwNumEventAttrs, deallocate);
                    array[i].Attributes.Clear();
                    if (oPCCONDITIONSTATE.dwNumEventAttrs > 0)
                    {
                        for (int k = 0; k < vARIANTs.Length; k++)
                        {
                            AttributeValue attributeValue = new AttributeValue();
                            attributeValue.ID       = 0;
                            attributeValue.Value    = vARIANTs[k];
                            attributeValue.ResultID = GetResultID(int32s2[k]);
                            array[i].Attributes.Add(attributeValue);
                        }
                    }

                    if (deallocate)
                    {
                        Marshal.DestroyStructure(ptr, typeof(OPCCONDITIONSTATE));
                    }

                    ptr = (IntPtr)(ptr.ToInt64() + Marshal.SizeOf(typeof(OPCCONDITIONSTATE)));
                }

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

            return(array);
        }
Exemple #2
0
 internal static Condition[] GetConditions(ref IntPtr pInput, int count, bool deallocate)
 {
     Condition[] conditionArray = null;
     if ((pInput != IntPtr.Zero) && (count > 0))
     {
         conditionArray = new Condition[count];
         IntPtr ptr = pInput;
         for (int i = 0; i < count; i++)
         {
             OPCCONDITIONSTATE opcconditionstate = (OPCCONDITIONSTATE)Marshal.PtrToStructure(ptr, typeof(OPCCONDITIONSTATE));
             conditionArray[i]                                = new Condition();
             conditionArray[i].State                          = opcconditionstate.wState;
             conditionArray[i].Quality                        = new Quality(opcconditionstate.wQuality);
             conditionArray[i].Comment                        = opcconditionstate.szComment;
             conditionArray[i].AcknowledgerID                 = opcconditionstate.szAcknowledgerID;
             conditionArray[i].CondLastActive                 = OpcCom.Interop.GetFILETIME(Convert(opcconditionstate.ftCondLastActive));
             conditionArray[i].CondLastInactive               = OpcCom.Interop.GetFILETIME(Convert(opcconditionstate.ftCondLastInactive));
             conditionArray[i].SubCondLastActive              = OpcCom.Interop.GetFILETIME(Convert(opcconditionstate.ftSubCondLastActive));
             conditionArray[i].LastAckTime                    = OpcCom.Interop.GetFILETIME(Convert(opcconditionstate.ftLastAckTime));
             conditionArray[i].ActiveSubCondition.Name        = opcconditionstate.szActiveSubCondition;
             conditionArray[i].ActiveSubCondition.Definition  = opcconditionstate.szASCDefinition;
             conditionArray[i].ActiveSubCondition.Severity    = opcconditionstate.dwASCSeverity;
             conditionArray[i].ActiveSubCondition.Description = opcconditionstate.szASCDescription;
             string[] strArray  = OpcCom.Interop.GetUnicodeStrings(ref opcconditionstate.pszSCNames, opcconditionstate.dwNumSCs, deallocate);
             int[]    numArray  = OpcCom.Interop.GetInt32s(ref opcconditionstate.pdwSCSeverities, opcconditionstate.dwNumSCs, deallocate);
             string[] strArray2 = OpcCom.Interop.GetUnicodeStrings(ref opcconditionstate.pszSCDefinitions, opcconditionstate.dwNumSCs, deallocate);
             string[] strArray3 = OpcCom.Interop.GetUnicodeStrings(ref opcconditionstate.pszSCDescriptions, opcconditionstate.dwNumSCs, deallocate);
             conditionArray[i].SubConditions.Clear();
             if (opcconditionstate.dwNumSCs > 0)
             {
                 for (int j = 0; j < strArray.Length; j++)
                 {
                     SubCondition condition = new SubCondition {
                         Name        = strArray[j],
                         Severity    = numArray[j],
                         Definition  = strArray2[j],
                         Description = strArray3[j]
                     };
                     conditionArray[i].SubConditions.Add(condition);
                 }
             }
             object[] objArray  = OpcCom.Interop.GetVARIANTs(ref opcconditionstate.pEventAttributes, opcconditionstate.dwNumEventAttrs, deallocate);
             int[]    numArray2 = OpcCom.Interop.GetInt32s(ref opcconditionstate.pErrors, opcconditionstate.dwNumEventAttrs, deallocate);
             conditionArray[i].Attributes.Clear();
             if (opcconditionstate.dwNumEventAttrs > 0)
             {
                 for (int k = 0; k < objArray.Length; k++)
                 {
                     AttributeValue value2 = new AttributeValue {
                         ID       = 0,
                         Value    = objArray[k],
                         ResultID = GetResultID(numArray2[k])
                     };
                     conditionArray[i].Attributes.Add(value2);
                 }
             }
             if (deallocate)
             {
                 Marshal.DestroyStructure(ptr, typeof(OPCCONDITIONSTATE));
             }
             ptr = (IntPtr)(ptr.ToInt32() + Marshal.SizeOf(typeof(OPCCONDITIONSTATE)));
         }
         if (deallocate)
         {
             Marshal.FreeCoTaskMem(pInput);
             pInput = IntPtr.Zero;
         }
     }
     return(conditionArray);
 }
Exemple #3
0
        /// <summary>
        /// Converts an array of OpcRcw.Ae.OPCCONDITIONSTATE structs to an array of Opc.Ae.Condition objects.
        /// </summary>
        internal static Condition[] GetConditions(ref IntPtr pInput, int count, bool deallocate)
        {
            Condition[] output = null;

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

                IntPtr pos = pInput;

                for (int ii = 0; ii < count; ii++)
                {
                    OpcRcw.Ae.OPCCONDITIONSTATE condition = (OpcRcw.Ae.OPCCONDITIONSTATE)Marshal.PtrToStructure(pos, typeof(OpcRcw.Ae.OPCCONDITIONSTATE));

                    output[ii] = new Condition();

                    output[ii].State             = condition.wState;
                    output[ii].Quality           = new Opc.Da.Quality(condition.wQuality);
                    output[ii].Comment           = condition.szComment;
                    output[ii].AcknowledgerID    = condition.szAcknowledgerID;
                    output[ii].CondLastActive    = OpcCom.Interop.GetFILETIME(Convert(condition.ftCondLastActive));
                    output[ii].CondLastInactive  = OpcCom.Interop.GetFILETIME(Convert(condition.ftCondLastInactive));
                    output[ii].SubCondLastActive = OpcCom.Interop.GetFILETIME(Convert(condition.ftSubCondLastActive));
                    output[ii].LastAckTime       = OpcCom.Interop.GetFILETIME(Convert(condition.ftLastAckTime));

                    output[ii].ActiveSubCondition.Name        = condition.szActiveSubCondition;
                    output[ii].ActiveSubCondition.Definition  = condition.szASCDefinition;
                    output[ii].ActiveSubCondition.Severity    = condition.dwASCSeverity;
                    output[ii].ActiveSubCondition.Description = condition.szASCDescription;

                    // unmarshal sub-conditions.
                    string[] names        = OpcCom.Interop.GetUnicodeStrings(ref condition.pszSCNames, condition.dwNumSCs, deallocate);
                    int[]    severities   = OpcCom.Interop.GetInt32s(ref condition.pdwSCSeverities, condition.dwNumSCs, deallocate);
                    string[] definitions  = OpcCom.Interop.GetUnicodeStrings(ref condition.pszSCDefinitions, condition.dwNumSCs, deallocate);
                    string[] descriptions = OpcCom.Interop.GetUnicodeStrings(ref condition.pszSCDescriptions, condition.dwNumSCs, deallocate);

                    output[ii].SubConditions.Clear();

                    if (condition.dwNumSCs > 0)
                    {
                        for (int jj = 0; jj < names.Length; jj++)
                        {
                            SubCondition subcondition = new SubCondition();

                            subcondition.Name        = names[jj];
                            subcondition.Severity    = severities[jj];
                            subcondition.Definition  = definitions[jj];
                            subcondition.Description = descriptions[jj];

                            output[ii].SubConditions.Add(subcondition);
                        }
                    }

                    // unmarshal attributes.
                    object[] values = OpcCom.Interop.GetVARIANTs(ref condition.pEventAttributes, condition.dwNumEventAttrs, deallocate);
                    int[]    errors = OpcCom.Interop.GetInt32s(ref condition.pErrors, condition.dwNumEventAttrs, deallocate);

                    output[ii].Attributes.Clear();

                    if (condition.dwNumEventAttrs > 0)
                    {
                        for (int jj = 0; jj < values.Length; jj++)
                        {
                            AttributeValue attribute = new AttributeValue();

                            attribute.ID       = 0;
                            attribute.Value    = values[jj];
                            attribute.ResultID = OpcCom.Ae.Interop.GetResultID(errors[jj]);

                            output[ii].Attributes.Add(attribute);
                        }
                    }

                    // deallocate structure.
                    if (deallocate)
                    {
                        Marshal.DestroyStructure(pos, typeof(OpcRcw.Ae.OPCCONDITIONSTATE));
                    }

                    pos = (IntPtr)(pos.ToInt64() + Marshal.SizeOf(typeof(OpcRcw.Ae.OPCCONDITIONSTATE)));
                }

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

            return(output);
        }