下面一段话是为了将variant_inp传给m_strReceive,你也可不必看下面代码,直接告诉我如何将VARIANT 转换为CString型.
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp,m_strReceive;
if(m_ctrlComm.GetCommEvent()==2) //表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput();//读缓冲区
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++) //将数组转换为CString变量
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
m_strReceive+=strtemp;
}
}
我给你个例子.
CComVariant var;
...
CString str;
switch( V_VT( &var ) )
{
case VT_BSTR:
str = V_BSTR( &var );
break;
case VT_INT:
str.format( _T("%d") , V_INT( &var ) );
break;
....
....
default:
break;
}
根据不同的数据类型你要做不同的处理
CString CCrack::strVARIANT(const COleVariant& var)
{
CString strRet;
strRet=_T("Fish");
switch(var.vt)
{
case VT_EMPTY:
case VT_NULL:
strRet=_T("");
break; case VT_I2:
strRet.Format(_T("%hd"),V_I2(&var));
break;
case VT_I4:
strRet.Format(_T("%d"),V_I4(&var));
break;
case VT_R4:
strRet.Format(_T("%e"),(double)V_R4(&var));
break;
case VT_R8:
strRet.Format(_T("%e"),(double)V_R8(&var));
break;
case VT_CY:
strRet=COleCurrency(var).Format();
break;
case VT_DATE:
strRet=COleDateTime(var).Format(_T("%m %d %y"));
break;
case VT_BSTR:
strRet=V_BSTRT(&var);
break;
case VT_DISPATCH:
strRet=_T("VT_DISPATCH");
break;
case VT_ERROR:
strRet=_T("VT_ERROR");
break;
case VT_BOOL:
return strBOOL(V_BOOL(&var));
case VT_VARIANT:
strRet=_T("VT_VARIANT");
break;
case VT_UNKNOWN:
strRet=_T("VT_UNKNOWN");
break;
case VT_I1:
strRet=_T("VT_I1");
break;
case VT_UI1:
strRet.Format(_T("0x%02hx"),(unsigned short)V_UI1(&var));
break;
case VT_UI2:
strRet=_T("VT_UI2");
break;
case VT_UI4:
strRet=_T("VT_UI4");
break;
case VT_I8:
strRet=_T("VT_l8");
break;
case VT_UI8:
strRet=_T("VT_UI8");
break;
case VT_INT:
strRet=_T("VT_INT");
break;
//**********************************************
case VT_UINT:
strRet=_T("VT_UINT");
break;
case VT_VOID:
strRet=_T("VT_VOID");
break;
case VT_HRESULT:
strRet=_T("VT_HRESULT");
break;
case VT_PTR:
strRet=_T("VT_PTR");
break;
case VT_SAFEARRAY:
strRet=_T("VT_SAFEARRAY");
break;
case VT_CARRAY:
strRet=_T("VT_CARRAY");
break;
case VT_USERDEFINED:
strRet=_T("VT_USERDEFINED");
break;
case VT_LPSTR:
strRet=_T("VT_LPSTR");
break;
case VT_LPWSTR:
strRet=_T("VT_LPWSTR");
break;
case VT_FILETIME:
strRet=_T("VT_FILETIME");
break;
case VT_BLOB:
strRet=_T("VT_BLOB");
break;
case VT_STREAM:
strRet=_T("VT_STREAM");
break;
case VT_STORAGE:
strRet=_T("VT_STORAGE");
break;
case VT_STREAMED_OBJECT:
strRet=_T("VT_STREAMED_OBJECT");
break;
case VT_STORED_OBJECT:
strRet=_T("VT_STORED_OBJECT");
break;
case VT_BLOB_OBJECT:
strRet=_T("VT_BLOB_OBJECT");
break;
case VT_CF:
strRet=_T("VT_CF");
break;
case VT_CLSID:
strRet=_T("VT_CLSID");
break;
}
WORD vt=var.vt;
if(vt&VT_ARRAY)
{
vt=vt&~VT_ARRAY;
strRet=_T("Array of");
}
if(vt&VT_BYREF)
{
vt=vt&~VT_BYREF;
strRet=_T("Pointer to");
}
if(vt!=var.vt)
{
switch(vt)
{
case VT_EMPTY:
strRet+=_T("VT_EMPTY");
break;
case VT_NULL:
strRet+=_T("VT_NULL");
break;
case VT_I2:
strRet+=_T("VT_I2");
break;
case VT_I4:
strRet+=_T("VT_I4");
break;
case VT_R4:
strRet+=_T("VT_R4");
break;
case VT_R8:
strRet+=_T("VT_R8");
break;
case VT_CY:
strRet+=_T("VT_CY");
break;
case VT_DATE:
strRet+=_T("VT_DATE");
break;
case VT_BSTR:
strRet+=_T("VT_BSTR");
break;
case VT_DISPATCH:
strRet+=_T("VT_DISPATCH");
break;
case VT_ERROR:
strRet+=_T("VT_ERROR");
break;
case VT_BOOL:
strRet+=_T("VT_BOOL");
break;
case VT_VARIANT:
strRet+=_T("VT_VARIANT");
case VT_UNKNOWN:
strRet+=_T("VT_UNKNOWN");
break; case VT_I1:
strRet+=_T("VT_I1");
break;
case VT_UI1:
strRet+=_T("VT_UI1");
break;
case VT_UI2:
strRet+=_T("VT_UI2");
break;
case VT_UI4:
strRet+=_T("VT_UI4");
break;
case VT_I8:
strRet+=_T("VT_l8");
break;
case VT_UI8:
strRet+=_T("VT_UI8");
break;
case VT_INT:
strRet+=_T("VT_INT");
break;
//**********************************************
case VT_UINT:
strRet+=_T("VT_UINT");
break;
case VT_VOID:
strRet+=_T("VT_VOID");
break;
case VT_HRESULT:
strRet+=_T("VT_HRESULT");
break;
case VT_PTR:
strRet+=_T("VT_PTR");
break;
case VT_SAFEARRAY:
strRet+=_T("VT_SAFEARRAY");
break;
case VT_CARRAY:
strRet+=_T("VT_CARRAY");
break;
case VT_USERDEFINED:
strRet+=_T("VT_USERDEFINED");
break;
case VT_LPSTR:
strRet+=_T("VT_LPSTR");
break;
case VT_LPWSTR:
strRet+=_T("VT_LPWSTR");
break;
case VT_FILETIME:
strRet+=_T("VT_FILETIME");
break;
case VT_BLOB:
strRet+=_T("VT_BLOB");
break;
case VT_STREAM:
strRet+=_T("VT_STREAM");
break;
case VT_STORAGE:
strRet+=_T("VT_STORAGE");
break;
case VT_STREAMED_OBJECT:
strRet+=_T("VT_STREAMED_OBJECT");
break;
case VT_STORED_OBJECT:
strRet+=_T("VT_STORED_OBJECT");
break;
case VT_BLOB_OBJECT:
strRet+=_T("VT_BLOB_OBJECT");
break;
case VT_CF:
strRet+=_T("VT_CF");
break;
case VT_CLSID:
strRet+=_T("VT_CLSID");
break;
}
}
return strRet;
}
//字段类型的转换
LPCTSTR CCrack::strFiledType(short sType)
{
switch(sType)
{
case(dbBoolean):
return _T("BOOL");
case(dbByte):
return _T("Byte");
case(dbInteger):
return _T("Integer");
case(dbLong):
return _T("Long");
case(dbCurrency):
return _T("Currency");
case(dbSingle):
return _T("float");
case(dbDouble):
return _T("Double");
case(dbDate):
return _T("Date");
case(dbText):
return _T("Text");
case(dbLongBinary):
return _T("Long Binary");
case(dbMemo):
return _T("Memo");
case(dbGUID):
return _T("GUID");
} return _T("UnKnown");
} //查询类型的转换LPCTSTR CCrack::strQueryDefType(short sType)
{
switch(sType)
{
case(dbQSelect):
return _T("Select");
case(dbQAction):
return _T("Action");
case(dbQCrosstab):
return _T("Crosstab");
case(dbQDelete):
return _T("Delete");
case(dbQUpdate):
return _T("Update");
case(dbQAppend):
return _T("Append");
case(dbQMakeTable):
return _T("MakeTable");
case(dbQDDL):
return _T("DDL");
case(dbQSQLPassThrough):
return _T("SQLPassThrough");
case(dbQSetOperation):
return _T("Set Operation");
case(dbQSPTBulk):
return _T("SPTBulk");
}
return _T("UnKnown");
}//BOOL值的转换
LPCTSTR CCrack::strBOOL(BOOL bFlag)
{
return bFlag ?_T("TRUE"):_T("FALSE");
}
{
_bstr_t bsMsg = bsMessageText;
LPCTSTR szMsg = (TCHAR*) bsMsg; // 如果需要的话,用_bstr_t将串转换为ANSI
做完转换的工作后,显示信息框,然后返回。
MessageBox ( hwndParent, szMsg, _T("Simple Message Box"), MB_OK );
return S_OK;
}
//...
CComVariant var(varA);
var.ChagneType(VT_BSTR);USES_CONVERSION;
CString str(OLE2CT(var.bstrVal));
{
CString strValue;
_variant_t var_t;
COleDateTime time_value;
COleCurrency var_currency;
switch(var.vt)
{
case VT_EMPTY:
strValue = _T("");
break;
case VT_UI1:
strValue.Format("%d",var.bVal);
break;
case VT_I2:
strValue.Format("%d",var.iVal);
break;
case VT_I4:
strValue.Format("%d",var.lVal);
break;
case VT_R4:
strValue.Format("%f",var.fltVal);
break;
case VT_R8:
strValue.Format("%f",var.dblVal);
break;
case VT_CY:
var_currency = var;
strValue = var_currency.Format(0);
break;
case VT_BSTR:
var_t = var;
strValue.Format("%s",(const char *)(_bstr_t)var_t);
break;
case VT_NULL: strValue=_T("");
break;
case VT_DATE:
time_value = var.date;
strValue = time_value.Format("%H:%m,%A,%B %d,%Y");
break;
case VT_BOOL:
strValue.Format("%d",var.boolVal);
break;
default:
strValue = _T("");
break;
}
return strValue;
}