首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

BCB6.0关于一个OPC的OPCDATASOURCE枚举有关问题

2012-12-18 
BCB6.0关于一个OPC的OPCDATASOURCE枚举问题以前同步读取一直使用cache,如HRESULThr m_IOPCsyncIO-Read(

BCB6.0关于一个OPC的OPCDATASOURCE枚举问题
以前同步读取一直使用cache,如HRESULT  hr = m_IOPCsyncIO->Read(OPC_DS_CACHE,cdwItems, phServer, &pValues, &pErrors);
从未出过问题,现在仿照一个VC做的OPC类做个cache、device可选式的,如下修改
void OpcClient :: SyncRead(ITEM *cItemList,DWORD cdwItems, bool bDeviceRead)
{
……
        HRESULT  hr   = E_FAIL;
        OPCDATASOURCE dwSource    = bDeviceRead ? OPC_DS_DEVICE : OPC_DS_CACHE;
        hr = m_IOPCsyncIO->Read(dwSource,cdwItems, phServer, &pValues, &pErrors);

……
}
则hr= -2147023115 ,表示 "枚举值越界",断点跟踪dwSource(只会是1或2)都正常。

且该段代码在VC中运行正常,后不得已改为如下即正常:
void OpcClient :: SyncRead(ITEM *cItemList,DWORD cdwItems, bool bDeviceRead)
{
……
        HRESULT  hr   = E_FAIL;
        if(bDeviceRead)
                hr = m_IOPCsyncIO->Read(OPC_DS_DEVICE,cdwItems, phServer, &pValues, &pErrors);
        else
                hr = m_IOPCsyncIO->Read(OPC_DS_CACHE,cdwItems, phServer, &pValues, &pErrors);
 ……
}
               

opcda.h中枚举定义如下
typedef
enum tagOPCDATASOURCE
    {OPC_DS_CACHE= 1,
OPC_DS_DEVICE= OPC_DS_CACHE + 1
    } OPCDATASOURCE; 



[解决办法]
无人玩opc吗?

热点排行