private void AddItems(List <string> p_ItemIds)
        {
            int l_ItemClientHandle = 0;

            OpcItemDef[]    l_ItemDef = new OpcItemDef[p_ItemIds.Count];
            OpcItemResult[] l_AddRes;

            foreach (string l_ItemName in p_ItemIds)
            {
                l_ItemDef[l_ItemClientHandle] = new OpcItemDef(l_ItemName, false, l_ItemClientHandle, VarEnum.VT_BSTR);
                l_ItemClientHandle++;
            }

            _group.AddItems(l_ItemDef, out l_AddRes);

            l_ItemClientHandle = 0;
            foreach (string l_ItemName in p_ItemIds)
            {
                if (l_AddRes[l_ItemClientHandle].Error == HResults.S_OK)
                {
                    Dictionary <string, string> l_ItemProps = new Dictionary <string, string>();
                    l_ItemProps.Add(CModel.ServerModel.ItemPropIdKey, _server.GetItemID(l_ItemName));
                    l_ItemProps.Add(CModel.ServerModel.ItemPropTypeKey, OpcUtility.TypeToString((int)l_AddRes[l_ItemClientHandle].CanonicalDataType));

                    _serverModel.AddItem(l_ItemClientHandle, l_AddRes[l_ItemClientHandle].HandleServer, l_ItemProps);
                }

                l_ItemClientHandle++;
            }
        }
        private void ValidateItemIds(ref List <string> p_ItemIds)
        {
            List <string> l_ItemIds = new List <string>(p_ItemIds);

            foreach (string l_ItemName in l_ItemIds)
            {
                OpcItemResult[] l_ItemResult;
                OpcItemDef[]    l_ItemDef = new OpcItemDef[1];

                l_ItemDef[0] = new OpcItemDef(l_ItemName, true, 0, VarEnum.VT_BSTR);

                if (!_group.ValidateItems(l_ItemDef, false, out l_ItemResult))
                {
                    p_ItemIds.Remove(l_ItemName);
                }
            }
        }