看了以前很多关于VARIANT的转换帖子,包括CSDN的技术文档,但是还是不甚明白。
(1)我有一个函数的参数是VARIANT的,我希望传进去一个字符串(char*),能不能够直接传进去char*呢?还是我必须要把char*转换为CString,然后通过(_bstr_t)转换成VT_BSTR传进去呢?
(2)一个调用数据库的函数,返回值是VARIANT的,但是我不知道VARIANT里面存储的类型是什么,我怎么取到它的内容呢?也就是说,现在我已经有了一个VARIANT的变量,比如是vRet了,我怎么知道他是什么类型的?

解决方案 »

  1.   

    2.下面这个函数把VARIANT型的变量转成CStringCString VariantToCString(VARIANT var)
    {
    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;
    }
      

  2.   

    那么从字符串转换为VARIANT呢?
    CString sColName = "JGBM";
    vIndex.vt = VT_BSTR;
    vIndex.bstrVal = (_bstr_t)sColName;
    最后一行运行时出错了,怎么回事?
      

  3.   

    http://www.china-askpro.com/msg23/qa34.shtml
      

  4.   

    CString str;
    _variant_t var="abc";str=var.vt==VT_NULL?"":(char*)(_bstr_t)var;
      

  5.   

    CString str="abc";_variant_t var;var=(LPCSTR)CString;