Beispiel #1
0
        public int[] SetDataTypes(int[] serverHandles, short[] requestedDataTypes)
        {
            var ppErrors = IntPtr.Zero;

            ItemMgt.SetDatatypes(serverHandles.Length, serverHandles, requestedDataTypes, out ppErrors);
            return(ComUtils.GetInt32s(ref ppErrors, serverHandles.Length, true));
        }
Beispiel #2
0
        public int[] SetActiveState(int[] serverHandles, bool isActive)
        {
            var ppErrors = IntPtr.Zero;

            ItemMgt.SetActiveState(serverHandles.Length, serverHandles, isActive ? 1 : 0, out ppErrors);
            return(ComUtils.GetInt32s(ref ppErrors, serverHandles.Length, true));
        }
Beispiel #3
0
        public int[] SetClientHandles(int[] serverHandles, int[] clientHandles)
        {
            var ppErrors = IntPtr.Zero;

            ItemMgt.SetClientHandles(serverHandles.Length, serverHandles, clientHandles, out ppErrors);
            return(ComUtils.GetInt32s(ref ppErrors, serverHandles.Length, true));
        }
Beispiel #4
0
        public int[] RemoveItems(int[] serverHandles)
        {
            var ppErrors = IntPtr.Zero;

            ItemMgt.RemoveItems(serverHandles.Length, serverHandles, out ppErrors);
            return(ComUtils.GetInt32s(ref ppErrors, serverHandles.Length, true));
        }
Beispiel #5
0
        public OpcItemResult[] AddItems(OpcItemDefine[] items)
        {
            var rawItems = items.Select(item => new OPCITEMDEF
            {
                bActive             = item.IsActive ? 1 : 0,
                hClient             = item.ClientHandle,
                szAccessPath        = item.AccessPath,
                szItemID            = item.ItemId,
                vtRequestedDataType = item.RequestedDataType
            })
                           .ToArray();

            var ppAddResults = IntPtr.Zero;
            var ppErrors     = IntPtr.Zero;

            ItemMgt.AddItems(items.Length, rawItems, out ppAddResults, out ppErrors);

            var errors  = ComUtils.GetInt32s(ref ppErrors, items.Length, true);
            var results = GetStructures <OPCITEMRESULT>(ppAddResults, items.Length).Zip(errors, (r, e) =>
            {
                try
                {
                    if (r.pBlob != IntPtr.Zero)
                    {
                        Marshal.FreeCoTaskMem(r.pBlob);
                        r.pBlob = IntPtr.Zero;
                    }
                    return(new OpcItemResult
                    {
                        AccessRights = r.dwAccessRights,
                        CanonicalDataType = r.vtCanonicalDataType,
                        ErrorCode = e,
                        ServerHandle = r.hServer
                    });
                }
                catch (Exception ex)
                {
                    return(new OpcItemResult {
                        ErrorCode = ex.HResult
                    });
                }
            })
                          .ToArray();

            return(results);
        }