变体VARIANT

变体VARIANT

     目前计算机语言多种多样,如C++、Java、Basic、Pascal等,此外还有JavaScript、VBScript、ActionScript等脚本语言,它们各自维护自己的数据类型,当使用C++这样强类型的语言来读取数据库或者与其他语言之间来交换数据时,它很有可能不知道获取到的数据的具体类型,这个时候必须借助于变体类型读取数据。VARIANT数据类型就具有跨语言的特性,同时它可以表示(存储)任意类型的数据。其在Visual C++中的定义: 
1.        typedef tagVARIANT VARIANT;  
2.        typedef struct tagVARIANT VARIANTARG; 
VARIANT 其实是一个结构,结构中用一个vt成员表示数据的类型,同时真正的数据则存储在union空间中。一般我们使用VARIANT的步骤如下所示。
 
定义一个VARIANT变量,如:var。
 
通过vt成员设定VARIANT变量的数据类型,如:var.vt = VT_I4。
 
通过对应的union成员设定数据内容,如:var.lVal = 100。
 
综上所述,利用VARIANT表示一个整型数据:
 
1.        VARIANT var;  
2.        var.vt = VT_I4;     //指明整型数据
    
3.        var.lVal = 100;     //赋值
    
4.        利用VARIANT表示一个布尔值:
  
5.        VARIANT var;  
6.        var.vt = VT_BOOL;                   //指明整型数据
    
7.        var.boolVal = VARIANT_TRUE;     //赋值
    
8.        利用VARIANT保存一个字符串:
  
9.        VARIANT var;  
10.    var.vt = VT_BSTR;   
11.    var.bstrVal = SysAllocString(L"hello, world!"); 
根据以上的代码,读者可能会猜到,VARIANT的定义可能类似于如下:
 
1.        struct VARIANT  
2.        {  
3.            VARTYPE vt;                     //数据类型
    
4.            union 
5.            {  
6.                LONG            lVal;       //VT_I4    
7.                VARIANT_BOOL    boolVal     //VT_BOOL    
8.                BSTR            bstrVal;    //VT_BSTR    
9.            }  
10.    }; 
实际上,VARIANT的定义就是这样的!只不过由于它需要支持的类型太多,所以它包含的联合成员会更多。限于篇幅,在此不再附出。
 
VARIANT支持的类型,也就是vt成员的取值如表所示。 

目前计算机语言多种多样,如C++、Java、Basic、Pascal等,此外还有JavaScript、VBScript、ActionScript等脚本语言,它们各自维护自己的数据类型,当使用C++这样强类型的语言来读取数据库或者与其他语言之间来交换数据时,它很有可能不知道获取到的数据的具体类型,这个时候必须借助于变体类型读取数据。VARIANT数据类型就具有跨语言的特性,同时它可以表示(存储)任意类型的数据。其在Visual C++中的定义:
1.        typedef tagVARIANT VARIANT;
2.        typedef struct tagVARIANT VARIANTARG;
VARIANT
其实是一个结构,结构中用一个vt成员表示数据的类型,同时真正的数据则存储在union空间中。一般我们使用VARIANT的步骤如下所示。
定义一个VARIANT变量,如:var。
通过vt成员设定VARIANT变量的数据类型,如:var.vt = VT_I4。
通过对应的union成员设定数据内容,如:var.lVal = 100。
综上所述,利用VARIANT表示一个整型数据:
1.        VARIANT var;
2.        var.vt = VT_I4;     //
指明整型数据 
3.        var.lVal = 100;     //赋值
 
4.        利用VARIANT表示一个布尔值:

5.        VARIANT var;
6.        var.vt = VT_BOOL;                   //
指明整型数据 
7.        var.boolVal = VARIANT_TRUE;     //赋值
 
8.        利用VARIANT保存一个字符串:

9.        VARIANT var;
10.    var.vt = VT_BSTR; 
11.    var.bstrVal = SysAllocString(L"hello, world!");
根据以上的代码,读者可能会猜到,VARIANT的定义可能类似于如下:
1.        struct VARIANT
2.        {
3.            VARTYPE vt;                     //
数据类型 
4.            union
5.            {
6.                LONG            lVal;       //VT_I4 
7.                VARIANT_BOOL    boolVal     //VT_BOOL 
8.                BSTR            bstrVal;    //VT_BSTR 
9.            }
10.    };
实际上,VARIANT的定义就是这样的!只不过由于它需要支持的类型太多,所以它包含的联合成员会更多。限于篇幅,在此不再附出。

VARIANT支持的类型,也就是vt成员的取值如表所示。 

\

\

\

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值