看了以前很多关于VARIANT的转换帖子,包括CSDN的技术文档,但是还是不甚明白。
(1)我有一个函数的参数是VARIANT的,我希望传进去一个字符串(char*),能不能够直接传进去char*呢?还是我必须要把char*转换为CString,然后通过(_bstr_t)转换成VT_BSTR传进去呢?
(2)一个调用数据库的函数,返回值是VARIANT的,但是我不知道VARIANT里面存储的类型是什么,我怎么取到它的内容呢?也就是说,现在我已经有了一个VARIANT的变量,比如是vRet了,我怎么知道他是什么类型的?
(1)我有一个函数的参数是VARIANT的,我希望传进去一个字符串(char*),能不能够直接传进去char*呢?还是我必须要把char*转换为CString,然后通过(_bstr_t)转换成VT_BSTR传进去呢?
(2)一个调用数据库的函数,返回值是VARIANT的,但是我不知道VARIANT里面存储的类型是什么,我怎么取到它的内容呢?也就是说,现在我已经有了一个VARIANT的变量,比如是vRet了,我怎么知道他是什么类型的?
{
CString strValue;
_variant_t var_t;
_bstr_t bst_t;
time_t cur_time;
CTime 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;
bst_t = var_t;
strValue.Format ("%s",(const char*)bst_t);
break;
case VT_NULL:
strValue = _T("");
break;
case VT_DATE:
cur_time = (long)var.date;
time_value = cur_time;
strValue = time_value.Format("%A,%B%d,%Y");
break;
case VT_BOOL:
strValue.Format("%d",var.boolVal );
break;
default:
strValue = _T("");
break;
}
return strValue;
}
CString sColName = "JGBM";
vIndex.vt = VT_BSTR;
vIndex.bstrVal = (_bstr_t)sColName;
最后一行运行时出错了,怎么回事?
_variant_t var="abc";str=var.vt==VT_NULL?"":(char*)(_bstr_t)var;