您的位置:首页 > 运维架构

OPC 技术文档之 IOPCBrowseServerAddressSpace 的使用

2012-08-15 17:06 423 查看
在制作 OPC Client 的时候通常需要浏览OPC Serve的所有已经定义的item名称(当然OPC Server必须支持这个选项),如果用VC的话就要使用到IOPCBrowseServerAddressSpace接口,那么,下面是提取item目录结构的一个自制的递归函数。

void TryBrowseBranch(IOPCBrowseServerAddressSpace *pBSAS, LPCWSTR lpprestr,LPCWSTR lpcw)

   {

   HRESULT r1;

   OPCNAMESPACETYPE onst;

   LPWSTR pItemID;

   WCHAR s,*lp;

   IEnumString *pEnum = 0;

   char szBuf[40];

   long nPos = 1;

   HRESULT r2 = S_OK;

   LPOLESTR pStr;

   ULONG actual;

   lp = WSTRFromSBCS("%ls,%ls",pIMalloc);

// 向lpcw节点的枝叶改变位置

   pBSAS->ChangeBrowsePosition(OPC_BROWSE_DOWN,lpcw);

   r1 = pBSAS->BrowseOPCItemIDs(OPC_FLAT,&s,VT_EMPTY,0,&pEnum);

   pBSAS->QueryOrganization(&onst);

// 提取该节点下的所有枝叶

   while((r2 = pEnum->Next(1, &pStr, &actual)) == S_OK)

   {

   printf("%ls%ls--%ls/n",lpprestr,lpcw, pStr);

   wprintf(lpprestr,lp,lpcw,pStr);

   if(onst == OPC_BRANCH)

   TryBrowseBranch(pBSAS,lpprestr,pStr);

   }

   // pBSAS->ChangeBrowsePosition(OPC_BROWSE_DOWN,

   // printf("OPC_NS_HIERARCHIAL 含有枝干");

   // get firset item

   pIMalloc->Free(lp);

   pIMalloc->Free(pStr);

   pEnum->Release();

// 回到名叫lpcw的主干位置

   pBSAS->ChangeBrowsePosition(OPC_BROWSE_UP,lpcw);

   }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: