VARIANT数据结构包含两个域(如果不考虑保留的域)。vt域描述了第二个域的数据类型。为了使多种类型能够在第二个域中出现,我们定义了一个联合结构。所以,第二个域的名称随着vt域中输入值的不同而改变。用于指定vt域值情况的常量在联合的定义中以每一行的注释形式给出。

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
typedef struct tagVARIANT VARIANT;
typedef struct tagVARIANT VARIANTARG;
struct tagVARIANT {  
    union {  
        struct __tagVARIANT {  
            VARTYPE vt;  
            WORD    wReserved1;  
            WORD    wReserved2;  
            WORD    wReserved3;  
            union {  
                ULONGLONG     ullVal;       /* VT_UI8               */  
                LONGLONG      llVal;        /* VT_I8                */  
                LONG          lVal;         /* VT_I4                */  
                BYTE          bVal;         /* VT_UI1               */  
                SHORT         iVal;         /* VT_I2                */  
                FLOAT         fltVal;       /* VT_R4                */  
                DOUBLE        dblVal;       /* VT_R8                */  
                VARIANT_BOOL  boolVal;      /* VT_BOOL              */  
                _VARIANT_BOOL bool;         /* (obsolete)           */  
                SCODE         scode;        /* VT_ERROR             */  
                CY            cyVal;        /* VT_CY                */  
                DATE          date;         /* VT_DATE              */  
                BSTR          bstrVal;      /* VT_BSTR              */  
                IUnknown *    punkVal;      /* VT_UNKNOWN           */  
                IDispatch *   pdispVal;     /* VT_DISPATCH          */  
                SAFEARRAY *   parray;       /* VT_ARRAY             */  
                BYTE *        pbVal;        /* VT_BYREF|VT_UI1      */  
                SHORT *       piVal;        /* VT_BYREF|VT_I2       */  
                LONG *        plVal;        /* VT_BYREF|VT_I4       */  
                LONGLONG *    pllVal;       /* VT_BYREF|VT_I8       */  
                FLOAT *       pfltVal;      /* VT_BYREF|VT_R4       */  
                DOUBLE *      pdblVal;      /* VT_BYREF|VT_R8       */  
                VARIANT_BOOL *pboolVal;     /* VT_BYREF|VT_BOOL     */  
                _VARIANT_BOOL *pbool;       /* (obsolete)           */  
                SCODE *       pscode;       /* VT_BYREF|VT_ERROR    */  
                CY *          pcyVal;       /* VT_BYREF|VT_CY       */  
                DATE *        pdate;        /* VT_BYREF|VT_DATE     */  
                BSTR *        pbstrVal;     /* VT_BYREF|VT_BSTR     */  
                IUnknown **   ppunkVal;     /* VT_BYREF|VT_UNKNOWN  */  
                IDispatch **  ppdispVal;    /* VT_BYREF|VT_DISPATCH */  
                SAFEARRAY **  pparray;      /* VT_BYREF|VT_ARRAY    */  
                VARIANT *     pvarVal;      /* VT_BYREF|VT_VARIANT  */  
                PVOID         byref;        /* Generic ByRef        */  
                CHAR          cVal;         /* VT_I1                */  
                USHORT        uiVal;        /* VT_UI2               */  
                ULONG         ulVal;        /* VT_UI4               */  
                INT           intVal;       /* VT_INT               */  
                UINT          uintVal;      /* VT_UINT              */  
                DECIMAL *     pdecVal;      /* VT_BYREF|VT_DECIMAL  */  
                CHAR *        pcVal;        /* VT_BYREF|VT_I1       */  
                USHORT *      puiVal;       /* VT_BYREF|VT_UI2      */  
                ULONG *       pulVal;       /* VT_BYREF|VT_UI4      */  
                ULONGLONG *   pullVal;      /* VT_BYREF|VT_UI8      */  
                INT *         pintVal;      /* VT_BYREF|VT_INT      */  
                UINT *        puintVal;     /* VT_BYREF|VT_UINT     */  
                struct __tagBRECORD {  
                    PVOID         pvRecord;  
                    IRecordInfo * pRecInfo;  
                } __VARIANT_NAME_4;         /* VT_RECORD            */  
            } __VARIANT_NAME_3;  
        } __VARIANT_NAME_2;  
  
        DECIMAL decVal;  
    } __VARIANT_NAME_1;  
};

常用的tagVARIANT结构【整理】的更多相关文章

  1. CentOS最常用命令及快捷键整理

    CentOS最常用命令及快捷键整理  整理了Linux常用命令及快捷键. 常用命令: 文件和目录: # cd /home                        进入 '/home' 目录 # ...

  2. Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构

    Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 按照存储结构划分btree,hash,bitmap,fulltext1 1.2. 索引的类型  按查找 ...

  3. 常用的WinAPI函数整理

    常用的WinAPI函数整理 一.进程  创建进程:    CreateProcess("C:\\windows\\notepad.exe",0,0,0,0,0,0,0,&s ...

  4. JS~~~ 前端开发一些常用技巧 模块化结构 &&&&& 命名空间处理 奇技淫巧!!!!!!

    前端开发一些常用技巧               模块化结构       &&&&&     命名空间处理 奇技淫巧!!!!!!2016-09-29    17 ...

  5. 常用的shell命令整理

    工作快一年了,shell命令也玩了一年了.还是有点积累的,下面是本人常用的. 1.pwd | xargs -i basename {}   获取当前所在目录的名称 2.ps -ef|grep -w   ...

  6. IOS开发-OC学习-常用功能代码片段整理

    IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...

  7. ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS)

    ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS) 1. 网站资源: ROSwiki官网:http://wiki.ros.org/cn GitHub    ...

  8. Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构

    Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 索引的类型  按查找方式分,两种,分块索引 vs编号索引1 1.2. 按索引与数据的查找顺序可分为 正 ...

  9. Oracle数据库常用的Sql语句整理

    Oracle数据库常用的Sql语句整理 查看当前用户的缺省表空间 : select username,default_tablespace from user_users; 2.查看用户下所有的表 : ...

随机推荐

  1. mui 页面跳转

    1.初始化时创建子页面 mui.init({ subpages: [{ url: your - subpage - url, //子页面HTML地址,支持本地地址和网络地址 id: your - su ...

  2. 解决树莓派新内核无法使用18B20和没有声音的问题

    现在新版的树莓派内核由于为了兼容树莓派2和树莓派B+等以前的版本,采用了和原来不同的内核运行方式,使用了设备树的方式,更加灵活.但是由于可能不习惯这样的方式以及没太多相关这方面的介绍,导致很多用户更新 ...

  3. 05-hibernate注解-多对一单向外键关联

    多对一单向外键 1,多方持有一方的引用,比如:多个学生对应一个班级(多对一) 2,@ManyToOne(cascade={CascadeType.ALL},  fetch=FetchType.EAGE ...

  4. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...

  5. Windows 10 KMS 激活方法

    本篇文章由:http://xinpure.com/windows-10-activate-method/ 摘抄: http://www.nruan.com/win-key.html 须知:如果需要在线 ...

  6. CSRF攻击原理及测试方法

    CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执 ...

  7. centos 基础环境配置

    1,安装EPEL的yum源 EPEL 是 Extra Packages for Enterprise Linux 的缩写(EPEL),是用于 Fedora-based Red Hat Enterpri ...

  8. 双线机房双网卡双ip 路由设置

    做互联网网站,最头疼的事情之一就是电信和网通的互联互不通了,为了能够让北方网通和南方电信用户都可以快速的访问网站,解决办法就是托管 到双线机房.双线机房有两类,一类是通过BGP技术实现互联互通,服务器 ...

  9. 40. Implement Queue by Two Stacks【medium】

    As the title described, you should only use two stacks to implement a queue's actions. The queue sho ...

  10. .net访问Oracle数据库

    使用System.Data.OracleClient访问Oracle数据库时报错 尝试加载 Oracle 客户端库时引发 BadImageFormatException.如果在安装 32 位 Orac ...