vc _variant_t的用法
分类: VC |
先用
void _variant_t::Attach( VARIANT& varSrc )
然后用下面的来转换
COleDateTime vartodate(const _variant_t& var)
{
COleDateTime
value;
switch
(var.vt)
{
case
VT_DATE:
{
value
=
var.date;
}
break;
case
VT_EMPTY:
case
VT_NULL:
value.SetStatus(COleDateTime::null);
break;
default:
value.SetStatus(COleDateTime::null);
TRACE(_T("Warning:
未处理的
_variant_t
类型值;
文件:
%s;
行:
%d\n"),
__FILE__,
__LINE__);
}
return
value;
}
COleCurrency
vartocy(const
_variant_t&
var)
{
COleCurrency
value;
switch
(var.vt)
{
case
VT_CY:
value
=
(CURRENCY)var.cyVal;
break;
case
VT_EMPTY:
case
VT_NULL:
value.m_status
=
COleCurrency::null;
break;
default:
value.m_status
=
COleCurrency::null;
TRACE(_T("Warning:
未处理的
_variant_t
类型值;
文件:
%s;
行:
%d\n"),
__FILE__,
__LINE__);
}
return
value;
}
bool
vartobool(const
_variant_t&
var)
{
bool
value
=
false;
switch
(var.vt)
{
case
VT_BOOL:
value
=
var.boolVal
?
true
:
false;
case
VT_EMPTY:
case
VT_NULL:
break;
default:
TRACE(_T("Warning:
未处理的
_variant_t
类型值;
文件:
%s;
行:
%d\n"),
__FILE__,
__LINE__);
}
return
value;
}
BYTE
vartoby(const
_variant_t&
var)
{
BYTE
value
=
0;
switch
(var.vt)
{
case
VT_I1:
case
VT_UI1:
value
=
var.bVal;
break;
case
VT_NULL:
case
VT_EMPTY:
value
=
0;
break;
default:
TRACE(_T("Warning:
未处理的
_variant_t
类型值;
文件:
%s;
行:
%d\n"),
__FILE__,
__LINE__);
}
return
value;
}
short
vartoi(const
_variant_t&
var)
{
short
value
=
0;
switch
(var.vt)
{
case
VT_BOOL:
value
=
var.boolVal;
break;
case
VT_UI1:
case
VT_I1:
value
=
var.bVal;
break;
case
VT_I2:
case
VT_UI2:
value
=
var.iVal;
break;
case
VT_NULL:
case
VT_EMPTY:
value
=
0;
break;
default:
TRACE(_T("Warning:
未处理的
_variant_t
类型值;
文件:
%s;
行:
%d\n"),
__FILE__,
__LINE__);
}
return
value;
}
long
vartol(const
_variant_t&
var)
{
long
value
=
0;
switch
(var.vt)
{
case
VT_BOOL:
value
=
var.boolVal;
break;
case
VT_UI1:
case
VT_I1:
value
=
var.bVal;
break;
case
VT_UI2:
case
VT_I2:
value
=
var.iVal;
break;
case
VT_I4:
case
VT_UI4:
value
=
var.lVal;
break;
case
VT_INT:
value
=
var.intVal;
break;
case
VT_R4:
value
=
(long)(var.fltVal
+
0.5);
break;
case
VT_R8:
value
=
(long)(var.dblVal
+
0.5);
break;
case
VT_DECIMAL:
value
=
(long)var;
break;
case
VT_CY:
value
=
(long)var;
break;
case
VT_BSTR://字符串
case
VT_LPSTR://字符串
case
VT_LPWSTR://字符串
value
=
atol((LPCTSTR)(_bstr_t)var);
break;
case
VT_NULL:
case
VT_EMPTY:
value
=
0;
break;
default:
TRACE(_T("Warning:
未处理的
_variant_t
类型值;
文件:
%s;
行:
%d\n"),
__FILE__,
__LINE__);
}
return
value;
}
double
vartof(const
_variant_t&
var)
{
double
value
=
0;
switch
(var.vt)
{
case
VT_R4:
value
=
var.fltVal;
break;
case
VT_R8:
value
=
var.dblVal;
break;
case
VT_DECIMAL:
value
=
(double)var;
break;
case
VT_CY:
value
=
(double)var;
break;
case
VT_BOOL:
value
=
var.boolVal;
break;
case
VT_UI1:
case
VT_I1:
value
=
var.bVal;
break;
case
VT_UI2:
case
VT_I2:
value
=
var.iVal;
break;
case
VT_UI4:
case
VT_I4:
value
=
var.lVal;
break;
case
VT_INT:
value
=
var.intVal;
break;
case
VT_BSTR://字符串
case
VT_LPSTR://字符串
case
VT_LPWSTR://字符串
value
=
atof((LPCTSTR)(_bstr_t)var);
break;
case
VT_NULL:
case
VT_EMPTY:
value
=
0;
break;
default:
value
=
0;
TRACE(_T("Warning:
未处理的
_variant_t
类型值;
文件:
%s;
行:
%d\n"),
__FILE__,
__LINE__);
}
return
value;
}
CString
vartostr(const
_variant_t
&var)
{
CString
strValue;
switch
(var.vt)
{
case
VT_BSTR://字符串
case
VT_LPSTR://字符串
case
VT_LPWSTR://字符串
strValue
=
(LPCTSTR)(_bstr_t)var;
break;
case
VT_I1:
case
VT_UI1:
strValue.Format("%d",
var.bVal);
break;
case
VT_I2://短整型
strValue.Format("%d",
var.iVal);
break;
case
VT_UI2://无符号短整型
strValue.Format("%d",
var.uiVal);
break;
case
VT_INT://整型
strValue.Format("%d",
var.intVal);
break;
case
VT_I4:
//整型
strValue.Format("%d",
var.lVal);
break;
case
VT_I8:
//长整型
strValue.Format("%d",
var.lVal);
break;
case
VT_UINT://无符号整型
strValue.Format("%d",
var.uintVal);
break;
case
VT_UI4:
//无符号整型
strValue.Format("%d",
var.ulVal);
break;
case
VT_UI8:
//无符号长整型
strValue.Format("%d",
var.ulVal);
break;
case
VT_VOID:
strValue.Format("%8x",
var.byref);
break;
case
VT_R4://浮点型
strValue.Format("%.4f",
var.fltVal);
break;
case
VT_R8://双精度型
strValue.Format("%.8f",
var.dblVal);
break;
case
VT_DECIMAL:
//小数
strValue.Format("%.8f",
(double)var);
break;
case
VT_CY:
{
COleCurrency
cy
=
var.cyVal;
strValue
=
cy.Format();
}
break;
case
VT_BLOB:
case
VT_BLOB_OBJECT:
case
0x2011:
strValue
=
"[BLOB]";
break;
case
VT_BOOL://布尔型
strValue
=
var.boolVal
?
"TRUE"
:
"FALSE";
break;
case
VT_DATE:
//日期型
{
DATE
dt
=
var.date;
COleDateTime
da
=
COleDateTime(dt);
strValue
=
da.Format("%Y-%m-%d
%H:%M:%S");
}
break;
case
VT_NULL://NULL值
strValue
=
"";
break;
case
VT_EMPTY://空
strValue
=
"";
break;
case
VT_UNKNOWN://未知类型
default:
strValue
=
"UN_KNOW";
break;
}
return
strValue;
}