_variant_t和_bstr_t
生活随笔
收集整理的這篇文章主要介紹了
_variant_t和_bstr_t
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
_variant_t和_bstr_t這兩個類分別封裝并管理VARIANT和BSTR這兩種數(shù)據(jù)類型,
VARIANT和BSTR這兩種類型是COM中使用的數(shù)據(jù)類型。
?
實現(xiàn)_variant_t向int,String ,double,long,byte等類型轉(zhuǎn)換
?
為了C++中的變量應(yīng)用到ADO編程中,只能進行數(shù)據(jù)類型的轉(zhuǎn)換。
通過_variant_t和_bstr_t這兩個類,就可
?
以方便的把C++類型變量轉(zhuǎn)換成COM中的變量了。
?
CString轉(zhuǎn)換為_variant_t:
CString str = _T("xxx"); _variant_t var = (LPCTSTR)str;把CString 轉(zhuǎn)換為_variant_t:
整型:(long) (_variant_t) m_pRecordset->GetFieldByName("XX"); 字符串型:(m_pRecordset->GetFieldByName("XX")).bstrVal;把一個日期字符串轉(zhuǎn)成_variant_t:
1.CString可以直接轉(zhuǎn)_variant_t。 CString szTime("2008-8-8 08:08:08"); _variant_t mt = szTime; 2._variant_t轉(zhuǎn)CString用如下函數(shù): CString VariantToCString(_variant_t var) {CString str; //轉(zhuǎn)換以后的字符串switch(var.vt){ case VT_BSTR: //var is BSTR type str=var.bstrVal;break; case VT_I2: //var is short int type str.Format("%d",(int)var.iVal);break; case VT_I4: //var is long int type str.Format("%d",var.lVal);break; case VT_R4: //var is float type str.Format(".6f",(double)var.fltVal);break; case VT_R8: //var is double type str.Format(".6f",var.dblVal);break; case VT_CY: //var is CY type str=COleCurrency(var).Format();break; case VT_DATE: //var is DATE type str=COleDateTime(var).Format();break; case VT_BOOL: //var is VARIANT_BOOL str= (var.boolVal==0) ?L"FALSE": L"TRUE";break; default:str.Format("Unk type %d\n",var.vt);TRACE("Unknown type %d\n",var.vt);}return str;}把一個int轉(zhuǎn)換為_variant_t類型:
int a = 5;_variant_t var;var = (_variant_t)(long)a;?
?
?
?
UpdateData();CString strCmd = L"select * from n where 材料='";strCmd += m_Querymaterial;strCmd += "'";m_pRecordset = m_pConnection->Execute(_bstr_t(strCmd), &RecordsAffected, adCmdText);?
?
?
_variant_t vM,vN;try{while(!m_pRecordset->adoEOF){//取得第0列的值,從0開始計數(shù)vM=m_pRecordset->GetCollect(_variant_t((long)0));//取得“折射率”這一列的值vN=m_pRecordset->GetCollect("折射率");CString strtemp;if (vM.vt!=VT_NULL) { strtemp.Format(_T("%s"),vM.lVal); }if (vN.vt!=VT_NULL){strtemp+=" ";strtemp+=(LPCTSTR)(_bstr_t)vN;}m_list1.AddString(strtemp); m_list1.AddString(_T("\n"));m_pRecordset->MoveNext();//移動到下一條記錄 }}catch(_com_error &e) { AfxMessageBox(e.Description());return;} if (m_pRecordset->Close()){m_pRecordset->Close();m_pRecordset=NULL;} if (m_pConnection->State){m_pConnection->Close();m_pConnection=NULL;} }?
轉(zhuǎn)載于:https://www.cnblogs.com/wxl845235800/p/7413414.html
總結(jié)
以上是生活随笔為你收集整理的_variant_t和_bstr_t的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式(4)--AbstractFac
- 下一篇: 作业三以及考试