使用VARIANT来传递参数意味着非强类型语言(例如VBScript)能够调用使用强类型语言(C++)实现的方法。
VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。

VARIANT 数据类型在文件OAIDL.IDL中定义如下:

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

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

[cpp] view plain copy
  1. long lValue = 999;
  2. VARIANT vParam;
  3. vParam.vt = VT_I4;
  4. vParam.lVal = lValue;

在第一行中指定数据类型。常量VT_I4表明在第二个域中将出现一个long型的数据。根据类型VARIANT的定义,可以得知,当一个long型数据存入VARIANT类型时,其第二个域使用的名称是lVal。

使用char指针时 需要分配空间
    VARIANT    var;
    char achValue[2048] = {0};
    var.pcVal = achValue;
   string strTest= var1.pcVal;

C++ VARIANT数据类型操作详解相关推荐

  1. MySQL操作之JSON数据类型操作详解

    MySQL操作之JSON数据类型操作详解 这篇文章主要介绍了MySQL操作之JSON数据类型操作详解,内容较为详细,具有收藏价值,需要的朋友可以参考. 概述 mysql自5.7.8版本开始,就支持了j ...

  2. VC++常用数据类型及其操作详解 [

    一.VC常用数据类型列表 二.常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2 CString及string,char *与其他数据类型的转换和操作 ●CString,string,cha ...

  3. VC++常用数据类型及其操作详解(非常经典,共同分享)

    友情提示: 为了方便你更好的学习和阅读,也更好的体现尊重原创作者的劳动成果,请您直接查看转载原本链接: http://snailflying.blog.hexun.com/8219350_d.html ...

  4. VC++常用数据类型及其操作详解

    一.VC常用数据类型列表 二.常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2 CString及string,char *与其他数据类型的转换和操作 ●CString,string,cha ...

  5. python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  6. python加密字符串小写字母循环后错两位_python数据类型_字符串常用操作(详解)

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  7. java switch 值_Java switch多值匹配操作详解

    这篇文章主要介绍了Java switch多值匹配操作详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们都知道 switch 用来走流程分支,大 ...

  8. python列表切片后得到剩余列表_python列表切片和嵌套列表取值操作详解

    python列表切片和嵌套列表取值操作详解 给出列表切片的格式: [开头元素::步长] # 输出直到最后一个元素,(最后一个冒号和步长可以省略,下同) [开头元素:结尾元素(不含):步长] # 其中, ...

  9. Redis五种基本数据类型底层详解(原理篇)

    Redis五种基本数据类型底层详解 详细介绍Redis用到的数据结构 简单动态字符串 SDS和C字符串的区别 总结 链表 字典 哈希表 字典 哈希算法 解决键冲突 rehash(重点) 渐进式reha ...

最新文章

  1. mysql 字符串大小写_Mysql 字符串类型及大小写
  2. CIDR地址块及其子网划分
  3. 【LeetCode笔记】88. 合并两个有序数组(Java、双指针)
  4. 第一个express app 详细步骤
  5. 消息中间件学习总结(15)——Apache RocketMQ 正式开源分布式事务消息
  6. 苹果藏在 iOS 14.3 中的新算法被发现,CSAM 检测技术再遭抗议!
  7. 帧中继环境下ospf的使用(点到点模式)
  8. 实现图片的变亮,变暗,灰白
  9. 在的微型计算机系统中 外设可和,微机原理第七章题库
  10. linux 间传输文件的几种方法scp、sftp
  11. java中session对象及其常用方法
  12. uc android 4.2,uc网盘下载10.4.2 安卓版-uc网盘手机版西西软件下载
  13. c语言 格式化硬盘,在Windows 7上用c ++格式化硬盘(Formatting a hard disk in c++ on Windows 7)...
  14. Matlab/Simulink仿真问题及技巧汇总【持续更新】
  15. 人间炼狱,人性在哪儿---------------- 二十年穿铁衣取胆,母熊含泪杀子并自杀
  16. 2021高考昆山中学成绩查询,高考成绩查询即将开始!昆山这几所高中本科率惊人…...
  17. 电脑如何安装python
  18. 迈向个性化精准医疗的一大飞跃:特种酶复制DNA新细节揭示
  19. C语言求整数的和与均值
  20. ubuntu设置网卡默认启动_Ubuntu18.04 配置网卡上网

热门文章

  1. 冲激函数与卷积的多次邂逅
  2. 阿里云OCR本地图片文字识别
  3. 深度揭秘Xshell后门事件:入侵感染供应链软件的大规模定向攻击
  4. 私域流量暗战,品牌如何主宰下半场?
  5. PAMTRI:用于车辆重新识别的姿势感知多任务学习
  6. 基于STM32采集CO2(MH-Z19C)传感器数据
  7. 让卫浴间四季花香 最懂你的智能马桶 ——安华智能坐便器aB13017-1众测报告
  8. python下载某网站收费文档(一)——配合fiddler半自动版
  9. linux 获取优盘设备序列号变为小写再用MD5加密
  10. lisp一键室内标注_[AutoCAD][AutoLisp]根据图框自动匹配标注比例、文字大小、线性比例等信息 | 古意人...