IOPCBrowseServerAddressSpace的使用(vc)

王朝vc·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航