函数
STDMETHOD(com_ar_query_raw_records_c)(
LONG nTagID,
Com_hdTime* pStartTime,
Com_hdTime* pEndTime,
LONG* pRecNum,
SAFEARRAY** records
);
参数
[in]LONG nTagID,TagID
[in]Com_hdTime* pStartTime, 查询的起始时间戳
[in]Com_hdTime* pEndTime, 查询的结束时间戳
[in, out]LONG* pRecNum, in:待查的记录数量。out:实际返回的记录的数量。若小于要查询的记录数量,则表示该时间段的记录全部查完;若等于要查询的数量,则表示在该时间段内还有记录没有查完,用户可以根据返回的最后一条记录的时间来重新设置结束时间,然后再次调用该接口来查询剩下的记录。记录个数不能超过65535。必须是LONG类型。
[out]SAFEARRAY(Com_hdRecord)* records记录的值数组
返回值
查询成功,返回RD_SUCCESS,不是所有的都成功返回EC_HD_API_QUERY_SNAPSHOTS_FAILED。查询失败返回其它错误码,见error_code.h。
说明
1.查询一个Tag在一个时间段内的记录,该接口支持所有的数据类型。
2.该接口的时间戳精确到秒。例如:开始时间为“2001-1-1 08:08:08. 111”,结束时间是为“2001-1-2 08:08:08. 222”,查询到的记录是“2001-1-1 08:08:08. 000”到“2001-1-2 08:08:08. 000”范围内的原始记录。
举例
|
!MISSING PHRASE 'COPYCODE'! |
HRESULT hr ; BSTR szIP = ::SysAllocString( L"127.0.0.1" ); BSTR szBalIP = ::SysAllocString( L"1.1.1.1" ); LONG nPort = 5678; LONG nBakPort = 1234; LONG nTimeOut = 3;
hr = m_pabc->com_nt_connect_c(szIP, nPort, nBakIP, nBakPort, nTimeOut); if (hr != S_OK) { return; }
LONG nRecNum =200; LONG nTagID = 1;
// 组织传入数据 Com_hdTime comStartTime,comEndTime; comStartTime.nSec = 1378706236; comStartTime.nMsec = 0; comEndTime.nSec = 1378709836; comEndTime.nMsec = 0;
//传出数据的变量 SAFEARRAY* pSaRecords = NULL;
hr = m_pabc->com_ar_query_raw_records_c( nTagID, &comStartTime, &comEndTime, &nRecNum ,&pSaRecords); if (hr != S_OK) { return; }
//获取传出的record Com_hdRecord *pcomrecord = NULL; hr = SafeArrayAccessData(pSaRecords, (void HUGEP **)&pcomrecord); if(hr != S_OK) { return; }
//释放内部BSTR数据 LONG LBound; LONG UBound; SafeArrayGetLBound(pSaRecords, 1, &LBound); SafeArrayGetUBound(pSaRecords, 1, &UBound);
for(LONG i = LBound; i<= UBound; i++) { ::SysFreeString( pcomrecord[i-LBound].value ); }
hr = m_pabc->com_nt_disconnect_c(); if (hr != S_OK) { return; }
SafeArrayDestroy(pSaRecords); ::SysFreeString( szBalIP ); ::SysFreeString( szIP ); |