_variant_t

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

_variant_t是一个类,是VARIANT的完全包装类,它提供多种构造函数和数据转换函数。它继承自一个结构体,其结构如下:

struct tagVARIANT
{
union
{
struct __tagVARIANT
{
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union
{
LONG lVal;
BYTE bVal;
SHORT iVal;
FLOAT fltVal;
DOUBLE dblVal;
VARIANT_BOOL boolVal;
_VARIANT_BOOL bool;
SCODE scode;
CY cyVal;
DATE date;
BSTR bstrVal;
IUnknown __RPC_FAR *punkVal;
IDispatch __RPC_FAR *pdispVal;
SAFEARRAY __RPC_FAR *parray;
BYTE __RPC_FAR *pbVal;
SHORT __RPC_FAR *piVal;
LONG __RPC_FAR *plVal;
FLOAT __RPC_FAR *pfltVal;
DOUBLE __RPC_FAR *pdblVal;
VARIANT_BOOL __RPC_FAR *pboolVal;
_VARIANT_BOOL __RPC_FAR *pbool;
SCODE __RPC_FAR *pscode;
CY __RPC_FAR *pcyVal;
DATE __RPC_FAR *pdate;
BSTR __RPC_FAR *pbstrVal;
IUnknown __RPC_FAR *__RPC_FAR *ppunkVal;
IDispatch __RPC_FAR *__RPC_FAR *ppdispVal;
SAFEARRAY __RPC_FAR *__RPC_FAR *pparray;
VARIANT __RPC_FAR *pvarVal;
PVOID byref;
CHAR cVal;
USHORT uiVal;
ULONG ulVal;
INT intVal;
UINT uintVal;
DECIMAL __RPC_FAR *pdecVal;
CHAR __RPC_FAR *pcVal;
USHORT __RPC_FAR *puiVal;
ULONG __RPC_FAR *pulVal;
INT __RPC_FAR *pintVal;
UINT __RPC_FAR *puintVal;
struct __tagBRECORD
{
PVOID pvRecord;
IRecordInfo __RPC_FAR *pRecInfo;
} __VARIANT_NAME_4;
} __VARIANT_NAME_3;
} __VARIANT_NAME_2;
DECIMAL decVal;
} __VARIANT_NAME_1;
};
其中,vt表示的是_variant_t的数据类型,它的取值是以下枚举结构的值:

enum VARENUM
{

VT_EMPTY = 0 [V] [P] nothing

VT_NULL =1 [V] [P] SQL style Null

VT_I2 =2 [V][T][P][S] 2 byte signed int

VT_I4 =3 [V][T][P][S] 4 byte signed int

VT_R4 = 4 [V][T][P][S] 4 byte real

VT_R8 = 5 [V][T][P][S] 8 byte real

VT_CY = 6 [V][T][P][S] currency

VT_DATE =7 [V][T][P][S] date

VT_BSTR =8 [V][T][P][S] OLE Automation string

VT_DISPATCH =9 [V][T][P][S] IDispatch *

VT_ERROR =10 [V][T][P][S] SCODE

VT_BOOL =11 [V][T][P][S] True=-1, False=0

VT_VARIANT =12 [V][T][P][S] VARIANT *

VT_UNKNOWN =13 [V][T] [S] IUnknown *

VT_DECIMAL =14 [V][T] [S] 16 byte fixed point

VT_RECORD =36 [V] [P][S] user defined type

VT_I1 = 16 [V][T][P][s] signed char

VT_UI1 =17 [V][T][P][S] unsigned char

VT_UI2 =18 [V][T][P][S] unsigned short

VT_UI4 =19 [V][T][P][S] unsigned short

VT_I8 =20 [T][P] signed 64-bit int

VT_UI8 =21 [T][P] unsigned 64-bit int

VT_INT =22 [V][T][P][S] signed machine int

VT_UINT =23 [V][T] [S] unsigned machine int

VT_VOID =24 [T] C style void

VT_HRESULT =25 [T] Standard return type

VT_PTR =26 [T] pointer type

VT_SAFEARRAY =27 [T] (use VT_ARRAY in VARIANT)

VT_CARRAY = 28 [T] C style array

VT_USERDEFINED =29 [T] user defined type

VT_LPSTR = 30 [T][P] null terminated string

VT_LPWSTR =31 [T][P] wide null terminated string

VT_FILETIME = 64 [P] FILETIME

VT_BLOB = 65 [P] Length prefixed bytes

VT_STREAM =66 [P] Name of the stream follows

VT_STORAGE =67 [P] Name of the storage follows

VT_STREAMED_OBJECT =68 [P] Stream contains an object

VT_STORED_OBJECT =69 [P] Storage contains an object

VT_BLOB_OBJECT =70 [P] Blob contains an object

VT_CF = 71 [P] Clipboard format

VT_CLSID =72 [P] A Class ID

VT_VECTOR = 0x1000 [P] simple counted array

VT_ARRAY = 0x2000 [V] SAFEARRAY*

VT_BYREF = 0x4000 [V] void* for local use

VT_BSTR_BLOB =0xfff Reserved for system use

VT_RESERVED = 0x8000,

VT_ILLEGAL = 0xffff,

VT_ILLEGALMASKED = 0xfff,

VT_TYPEMASK = 0xfff

};

例子:
_variant_t变量初始化调用的是_variant_t的构造函数,如果用一个int型的变量对数字类的变量进行初始化,会出错,因为_variant_t的构造函数中没用用整型对其初始化的构造函数,可先将整型转化成long对其进行初始化,赋值操作与构造函数类似,也可如下操作:

int a = 2000;

_variant_t var;
var.vt = VT_I2;

var.lVal = a;

对于没有构造函数的数据类型都可以这样赋值。

对于有构造函数的就可以直接利用构造函数赋值,例如:

long l=222;
_variant_t lVal(l);
 

 日期:

_variant_t str_val;

CString val;

 case VT_DATE:
        SYSTEMTIME systime;
        VariantTimeToSystemTime(str_val.date,&systime);
        val.Format("%02d-%02d-%02d %02d:%02d:%02d",systime.wYear,systime.wMonth,systime.wDay,systime.wHour,systime.wMinute,systime.wSecond);
        break;

_bstr_t和_variant_t _bstr_t和_variant_t,主要介绍_bstr_t和_variant_t两种数据类型的简单作用。 立即下载

相关推荐

_variant_t的使用

我们先看看COM所支持的一些类型的基本类: (微软提供,在comdef.h中定义) 在COM中使用的标准类Class如下所示: _bstr_t:对BSTR类型进行打包,并提供有用的操作和方法; _com_error:定义抛出的error对象; _com_ptr_t:封装COM接口指针 _variant_t:对VARIANT类型进行打包,并提供有用的操作和方法; 一、_var...

diaomo9737的博客 1672

_variant_t 数据类型学习

_variant_t是一个类,是VARIANT的完全包装类,它提供多种构造函数和数据转换函数。它继承自一个结构体,其结构如下: struct  tagVARIANT     {     union         {         struct  __tagVARIANT             {             VARTYPE vt;             WORD

拼凑自我 1183

关于_variant_t的一些总结

该类型是对COM类型VARIANT数据的封装,方便与C/C++数据类型转换 定义在头文件<comutil.h> 实现在comsupp.lib /comsuppd.lib/comsuppw.lib/comsuppwd.lib 【关于构造赋值】 该类封装了各种基本类型构造和赋值函数,可以直接定义赋值: _variant_t vstr = "5"; _variant_t vint = 5; _variant_t vbl = true; 【关于取值和转换】 可以判断vt成员值,根据其准确类型取对应值

shellching的专栏 1110

_variant_t类型的使用

Normal 0 7.8 pt 0 2 false false false EN-US ZH-CN X-NONE

nathannemo的专栏 1691

ADO学习(五)_variant_t类型

Specifies the variant types. Syntax C++ Copy enum VARENUM { VT_EMPTY = 0, VT_NULL = 1, VT_I2 = 2, VT_I4 = 3, V

liujiayu2的专栏 2696

VC中的_variant_t和_bstr_t

////////////////////////////////////////////////////////////////////////////// // // Wrapper class for VARIANT // ////////////////////////////////////////////////////////////////////////////// /* * VARENUM usage key, * * * [V] - may appear in a VARIANT

htj10的博客 752

VARIANT、_variant_t 与 COleVariant 相互转换

VARIANT的结构可以参考头文件VC98/Include/OAIDL.H中关于结构体tagVARIANT的定义。 对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子: VARIANT va; int a=2001; va.vt=VT_I4;///指明整型数据 va.lVal=a; ///赋值 对于不马上赋值的

冷秋魂的专栏 2398

variant_t与_bstr_t

variant_t与_bstr_t                                        ----------部分资源来自网络,感谢作者,特此声明1.      short/long/float/double/char*可通过构造函数或直接赋值转换成_variant_t类型或_bstr_t类型。_variant_t 可隐式转换为short/long/floa

nanoo的专栏 963

_variant_t与其他数据类型的转换

转自:http://kuaixingdong.blog.hexun.com/29627840_d.html 我们先看看COM所支持的一些类型的基本类: (微软提供,在comdef.h中定义) 在COM中使用的标准类Class如下所示: _bstr_t:对BSTR类型进行打包,并提供有用的操作和方法; _com_error:定义抛出的error对象; _com_ptr_t:封装COM接口

白永辉的专栏 2万+

VARIANT 、_variant_t 与 COleVariant

_variant_t转化成char* ch;ch = (char*)(_bstr_t)vt; =================================VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。 对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:...

dizi9750的博客 258

关于_variant_t变量

_variant_t类封闭了VARIANT数据类型,VARIANT是一个结构体类型,我们可以看一下它的定义typedef struct tagVARIANT  {   VARTYPE vt;   unsigned short wReserved1;   unsigned short wReserved2;   unsigned short wReserved3;   union {     

极速飞翔的专栏 1606

BSTR,_bstr_t,CComBSTR,VARIANT,_variant_t,CString的转换

转载:http://www.cnblogs.com/GoodGoodWorkDayDayUp/archive/2010/11/15/1877655.html VC6.0上编译通过,console程序,使用静态MFC库。也许有不对的地方,欢迎指正 #include #include #include #include void main() {     BSTR bstrT

Erick08的专栏 1195

字符串转换系列三:VARIANT、COleVariant 和_variant_t

  三、VARIANT、COleVariant 和_variant_t  在OLE、ActiveX和COM中,VARIANT数据类型提供了一种非常有效的机制,由于它既包含了数据本身,也包含了数据的类型,因而它可以实现各种不同的自动化数据的传输。下面让我们来看看OAIDL.H文件中VARIANT定义的一个简化版:struct tagVARIANT { VARTYPE vt; union {  sho

timewolf的专栏 1万+

VARIANT、COleVariant 和_variant_t

VARIANT、COleVariant 和_variant_t  在OLE、ActiveX和COM中,VARIANT数据类型提供了一种非常有效的机制,由于它既包含了数据本身,也包含了数据的类型,因而它可以实现各种不同的自动化数据的传输。下面让我们来看看OAIDL.H文件中VARIANT定义的一个简化版:struct tagVARIANT { VARTYPE vt; union { 

Ackarlix的专栏 4104

_VARIANT_T 到 CSTRING 转换

_VARIANT_T 到 CSTRING 转换 数据类型转换函数 CString CZjyDlg::VariantToString(VARIANT var) { CString strValue;          _variant_t var_t;          _bstr_t bstr_t;          time_t cur_time;          CTim

菜头 1371
上一篇: sql 还原代码
下一篇: 删除重复行
forwin
博客等级 码龄21年 11粉丝 32原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值