WEB开发网
开发学院WEB开发Jsp IOPCBrowseServerAddressSpace的使用(vc) 阅读

IOPCBrowseServerAddressSpace的使用(vc)

 2008-01-05 18:56:38 来源:WEB开发网   
核心提示:在制作 OPC Client 的时候通常需要浏览OPC Serve的所有已经定义的item名称(当然OPC Server必须支持这个选项),假如用VC的话就要使用到IOPCBrowseServerAddressSpace接口,IOPCBrowseServerAddressSpace的使用(vc),那么,下面是提取ite

  在制作 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);
  }

Tags:IOPCBrowseServerAddressSpace 使用 vc

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接