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吗?