LVITEM lvItem;
ZeroMemory(&lvItem,sizeof(lvItem));
lvItem.cchTextMax = 255;
lvItem.pszText = m_szItemID.GetBuffer();
lvItem.mask = LVIF_TEXT;
m_pValueView->DeleteAllItems();
int i =m_pValueView->InsertItem(&lvItem);
m_pValueView->SetItem(0,1,LVIF_TEXT,
CToStringConverter::GetVTypeString(pvValues[0].vt),0,0,
0,0,0);
m_pValueView->SetItem(0,3,LVIF_TEXT,
CToStringConverter::GetFTString(pftTimeStamps[0]),0,0,0,0,0);
m_pValueView->SetItem(0,2,LVIF_TEXT,
CString(pvValues[0]),0,0,0,0,0);
m_pValueView->SetItem(0,4,LVIF_TEXT,
CToStringConverter::GetQualityString(pwQualities[0]),0,0,0,0,0);
return S_OK;
}
STDMETHODIMP CDataCallback::raw_OnReadComplete (
/*[in]*/ unsigned long dwTransid,
/*[in]*/ unsigned long hGroup,
/*[in]*/ HRESULT hrMasterquality,
/*[in]*/ HRESULT hrMastererror,
/*[in]*/ unsigned long dwCount,
/*[in]*/ unsigned long * phClientItems,
/*[in]*/ VARIANT * pvValues,
/*[in]*/ unsigned short * pwQualities,
/*[in]*/ struct _FILETIME * pftTimeStamps,
/*[in]*/ HRESULT * pErrors ) {return S_OK;}
STDMETHODIMP CDataCallback::raw_OnWriteComplete (
/*[in]*/ unsigned long dwTransid,
/*[in]*/ unsigned long hGroup,
/*[in]*/ HRESULT hrMastererr,
/*[in]*/ unsigned long dwCount,
/*[in]*/ unsigned long * pClienthandles,
/*[in]*/ HRESULT * pErrors ) {return S_OK;}
STDMETHODIMP CDataCallback::raw_OnCancelComplete (
/*[in]*/ unsigned long dwTransid,
/*[in]*/ unsigned long hGroup ) {return S_OK;}
Теперь можно приступать к операции асинхронного обмена данными.
Для этого вынесем на форму кнопку и дадим ей название «Подписаться», как
представлено на рисунке