读取ESP-iSYS数据ReadTagsValue

HRESULT ShellCallback::Read( DWORD dwNumItems, CTag ** ppTags, HRESULT * pErrors )
{
CSLock wait(&m_CS);
if( NULL == m_hConn )
{
for( DWORD i = 0; i < dwNumItems; i++ )
{
ShellTag * pShellTag = (ShellTag*)(ppTags[i]);
pErrors[i] = 0xF2000000;
}
return E_FAIL;
}
if( dwNumItems <= 0 || NULL == ppTags || NULL == pErrors )
{
return S_OK;
}
//获取授权证书校验结果
if( !m_pApp->m_verifyStateMgt.IsVerifyRight() )
{
for( DWORD i = 0; i < dwNumItems; i++ )
{
ShellTag * pShellTag = (ShellTag*)(ppTags[i]);
pErrors[i] = 0xF3000000;
}
return E_FAIL;
}
HTAG * phTags = new HTAG[dwNumItems];
if( NULL == phTags )
{
return E_OUTOFMEMORY;
}
for( DWORD i = 0; i < dwNumItems; i++ )
{
ShellTag * pShellTag = (ShellTag*)(ppTags[i]);
phTags[i] = pShellTag->m_hTag;
pErrors[i] = S_OK;
}
//批量读取位号值
HRESULT * pRes = NULL;
TAGVALSTATE * pVal = NULL;
HRESULT hRtn = ReadTagsValue( m_hConn, dwNumItems, phTags, &pRes, &pVal );
if( S_OK != hRtn )
{
delete[] phTags;
for( DWORD i = 0; i < dwNumItems; i++ )
{
ShellTag * pShellTag = (ShellTag*)(ppTags[i]);
pErrors[i] = hRtn;
}
return E_FAIL;
}
DWORD dwErrNum = 0;
for( i = 0; i < dwNumItems; i++ )
{
pErrors[i] = pRes[i];
if( S_OK != pErrors[i] )
{
dwErrNum++;
::VariantClear( &(pVal[i].vEng_value) );
continue;
}
ShellTag * pShellTag = (ShellTag*)(ppTags[i]);
pShellTag->m_quality = pVal[i].wQuality; //质量码
pShellTag->m_timestamp = pVal[i].ftTimeStamp; //时间戳
::VariantClear( &(pShellTag->m_value) ); //位号值
ChangeToRequestValue( pVal[i].vEng_value, pShellTag );
::VariantClear( &(pVal[i].vEng_value) );
}
::CoTaskMemFree(pRes);
::CoTaskMemFree(pVal);
delete[] phTags;
//返回结果
if( dwErrNum <= 0 )
{
return S_OK;
}
if( dwErrNum >= dwNumItems )
{
return E_FAIL;
}
return S_FALSE;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何书文老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值