tvNode = m_treeOPCServerBrowse.Nodes.Add(OPCItemElements[i].szName);
else
tvNode = ParentNode.Nodes.Add(OPCItemElements[i].szName);
tvNode.Tag = OPCItemElements[i].szItemID;
}
pBrowse.Browse(szItemName, ref ContinuationPoint, 0,
tagOPCBROWSEFILTER.OPC_BROWSE_FILTER_BRANCHES, "", "",
1,1,0,uiProp,out bMoreElements, out dwCount, out pElements);
tagOPCBROWSEELEMENT[] OPCBranchElements = new
tagOPCBROWSEELEMENT[dwCount];
for (int i = 0; i < dwCount; i++)
{
OPCBranchElements[i]=(tagOPCBROWSEELEMENT)Marshal.PtrToStructure(
pBrowseElements + i * sz, typeof(tagOPCBROWSEELEMENT));
if (null == ParentNode)
tvNode = m_treeOPCServerBrowse.Nodes.Add(OPCBranchElements[i].szName);
else
tvNode = ParentNode.Nodes.Add(OPCBranchElements[i].szName);
DisplayChildren(tvNode, OPCBranchElements[i].szName, pBrowse);
}
}
С вызовом функции Browse могут возникнуть проблемы, описанные в
предыдущем разделе, которые решаются редактированием библиотеки
opcprox.dll утилитами ilDAsm и ilDAsm.
Результат работы приведен на рисунке 27