COleVariant 本质上是一个枚举,用同一种类型来表达不同的子类型。如同boost中的variant。

例子

  1. COleVariant var(3.6f);
  2. float v = var.fltVal;
  3. CString str("testCOleVariant");
  4. COleVariant var2(str);
  5. CString cpStr(var2.bstrVal);

例子

  1. CString CMFCPropertyGridProperty::m_strFormatChar = _T("%c");
  2. CString CMFCPropertyGridProperty::m_strFormatShort = _T("%d");
  3. CString CMFCPropertyGridProperty::m_strFormatLong = _T("%ld");
  4. CString CMFCPropertyGridProperty::m_strFormatUShort = _T("%u");
  5. CString CMFCPropertyGridProperty::m_strFormatULong = _T("%u");
  6. CString CMFCPropertyGridProperty::m_strFormatFloat = _T("%f");
  7. CString CMFCPropertyGridProperty::m_strFormatDouble = _T("%lf");
  8. CString CMFCPropertyGridProperty::FormatProperty()
  9. {
  10. ASSERT_VALID(this);
  11. ASSERT_VALID(m_pWndList);
  12. COleVariant& var = m_varValue;
  13. CString strVal;
  14. .............
  15. switch (var.vt)
  16. {
  17. case VT_BSTR:
  18. strVal = var.bstrVal;
  19. break;
  20. case VT_I2:
  21. strVal.Format(m_strFormatShort, (short)var.iVal);
  22. break;
  23. case VT_I4:
  24. case VT_INT:
  25. strVal.Format(m_strFormatLong, (long)var.lVal);
  26. break;
  27. case VT_UI1:
  28. if ((BYTE)var.bVal != 0)
  29. {
  30. strVal.Format(m_strFormatChar, (TCHAR)(BYTE)var.bVal);
  31. }
  32. break;
  33. case VT_UI2:
  34. strVal.Format( m_strFormatUShort, var.uiVal);
  35. break;
  36. case VT_UINT:
  37. case VT_UI4:
  38. strVal.Format(m_strFormatULong, var.ulVal);
  39. break;
  40. case VT_R4:
  41. strVal.Format(m_strFormatFloat, (float)var.fltVal);
  42. break;
  43. case VT_R8:
  44. strVal.Format(m_strFormatDouble, (double)var.dblVal);
  45. break;
  46. case VT_BOOL:
  47. strVal = var.boolVal == VARIANT_TRUE ? m_pWndList->m_strTrue : m_pWndList->m_strFalse;
  48. break;
  49. default:
  50. // Unsupported type
  51. strVal = _T("*** error ***");
  52. }
  53. return strVal;
  54. }

COleVariant框架内容

    1. class COleVariant : public tagVARIANT
    2. {
    3. COleVariant(LPCTSTR lpszSrc);
    4. COleVariant(LPCTSTR lpszSrc, VARTYPE vtSrc); // used to set to ANSI string
    5. COleVariant(CString& strSrc);
    6. COleVariant(BYTE nSrc);
    7. COleVariant(short nSrc, VARTYPE vtSrc = VT_I2);
    8. COleVariant(long lSrc, VARTYPE vtSrc = VT_I4);
    9. COleVariant(const COleCurrency& curSrc);
    10. COleVariant(float fltSrc);
    11. COleVariant(double dblSrc);
    12. COleVariant(const COleDateTime& timeSrc);
    13. ....................................
    14. const COleVariant& operator=(float fltSrc);
    15. const COleVariant& operator=(double dblSrc);
    16. const COleVariant& operator=(const COleDateTime& dateSrc);
    17. const COleVariant& operator=(const CByteArray& arrSrc);
    18. const COleVariant& operator=(const CLongBinary& lbSrc);
    19. };
    20. void Clear();
    21. void ChangeType(VARTYPE vartype, LPVARIANT pSrc = NULL);
    22. void Attach(VARIANT& varSrc);
    23. VARIANT Detach();
    24. void GetByteArrayFromVariantArray(CByteArray& bytes);
    25. void SetString(LPCTSTR lpszSrc, VARTYPE vtSrc); // used to set ANSI string
    26. operator LPVARIANT();
    27. operator LPCVARIANT() const
    28. /////////////////////////////////////////////////////////////////////////////////
    29. struct tagVARIANT
    30. {    union
    31. {
    32. struct __tagVARIANT
    33. {
    34. VARTYPE vt;
    35. .......................
    36. union
    37. {
    38. LONGLONG llVal;
    39. LONG lVal;
    40. BYTE bVal;
    41. SHORT iVal;
    42. FLOAT fltVal;
    43. DOUBLE dblVal;
    44. ...........
    45. DATE date;
    46. BSTR bstrVal;
    47. IUnknown *punkVal;
    48. IDispatch *pdispVal;
    49. ..............
    50. }
    51. COleVariant::COleVariant(float fltSrc)
    52. { vt = VT_R4; fltVal = fltSrc; }
    53. _AFXDISP_INLINE COleVariant::COleVariant(CString& strSrc)
    54. { vt = VT_EMPTY; *this = strSrc; }
    55. const COleVariant& COleVariant::operator=(const CString& strSrc)
    56. {
    57. // Free up previous VARIANT
    58. Clear();
    59. vt = VT_BSTR;
    60. bstrVal = strSrc.AllocSysString();
    61. return *this;
    62. }
    63. typedef unsigned short VARTYPE;
    64. /*
    65. * VARENUM usage key,
    66. *
    67. * * [V] - may appear in a VARIANT
    68. * * [T] - may appear in a TYPEDESC
    69. * * [P] - may appear in an OLE property set
    70. * * [S] - may appear in a Safe Array
    71. *
    72. *
    73. *  VT_EMPTY            [V]   [P]     nothing
    74. *  VT_NULL             [V]   [P]     SQL style Null
    75. *  VT_I2               [V][T][P][S]  2 byte signed int
    76. *  VT_I4               [V][T][P][S]  4 byte signed int
    77. *  VT_R4               [V][T][P][S]  4 byte real
    78. *  VT_R8               [V][T][P][S]  8 byte real
    79. *  VT_CY               [V][T][P][S]  currency
    80. *  VT_DATE             [V][T][P][S]  date
    81. *  VT_BSTR             [V][T][P][S]  OLE Automation string
    82. *  VT_DISPATCH         [V][T]   [S]  IDispatch *
    83. *  VT_ERROR            [V][T][P][S]  SCODE
    84. *  VT_BOOL             [V][T][P][S]  True=-1, False=0
    85. *  VT_VARIANT          [V][T][P][S]  VARIANT *
    86. *  VT_UNKNOWN          [V][T]   [S]  IUnknown *
    87. *  VT_DECIMAL          [V][T]   [S]  16 byte fixed point
    88. .......................................
    89. enum VARENUM
    90. {   VT_EMPTY    = 0,
    91. VT_NULL = 1,
    92. VT_I2   = 2,
    93. VT_I4   = 3,
    94. VT_R4   = 4,
    95. VT_R8   = 5,
    96. VT_CY   = 6,
    97. VT_DATE = 7,
    98. VT_BSTR = 8,
    99. .........................................
    100. } ;

转:MFC之COleVariant的更多相关文章

  1. 魔改——MFC SDI 支持 内嵌 EXCEL OLE

    ==================================声明================================== 本文版权归作者所有 未经作者授权 请勿转载 保留法律追究的 ...

  2. MFC vs2012 Office2013 读写excel文件

    近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,这里本以为很简单,结果...废话少说,过程如下: 笔者环境:win7 64+VS2012+Office2 ...

  3. VS2010 MFC对Excel的操作

    这是帮别人做项目遇到的一个问题,的那个是纠结了老长时间,本以为是一件很轻松的事... 首先,这里采用了OLE来对Excel进行操作,网上其实有大把的例子,虽然都可以运行,但是并不能满足项目要求,其实我 ...

  4. VS2008基于对话框的MFC上位机串口通信(C++实现)简单例程

    首先,在 vs2008 环境下创建 MFC 运用程序 设置项目名称为 ComTest(这个地方随意命名,根据个人习惯),点击确定后,点击下一步 出现如下界面 选择"基于对话框"模式 ...

  5. MFC 简单输出EXCEL - (OLE)

    三图胜千言: 就是酱紫: //打印领料表 void CKnifeDlgDlg::PrintCurUsedTabel(int order) { // TODO: Add your command han ...

  6. VS2010下MFC的串口编程

    串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串 ...

  7. MFC -- Excel操作简介(基于VS2010)

    一.添加与 Excel 操作相关的头文件 项目 -> 类向导,在右上方有一个下拉栏,选择其中的 类型库中的MFC类(T),即可看到下图所示界面,选择“文件”选项,然后在下方的位置选项中添加本地文 ...

  8. (转载)用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信

    此文章以visual C++数据採集与串口通信測控应用实战为參考教程 此文章适合VC++串口通信入门 一.页面布局及加入控件 1, 安装好vs2010如图 2, 新建一个基于VC++的MFC项目com ...

  9. MFC【6】文件I/O和串行化

    文件输入和输出(I/O)服务是所有操作系统的主要工作.Microsoft Windows提供了各种API函数用来读.写和操作磁盘文件.MFC将这些桉树和CFile类融合在面对对象的模型里.其中CFil ...

随机推荐

  1. sql给整数补零

     update hs_user.clientorder a set a.stockcode = lpad(a.stockcode,6,'0')   where a.market = 'SZ' 

  2. php开启curl和openssl

    php开启curl和openssl 开启php curl函数库的步骤 1).去掉windows/php.ini 文件里;extension=php_curl.dll前面的; /*用 echo phpi ...

  3. MyBatis架构图

    MyBatis架构 MyBatis依赖的jar不多,而且代码行数也没多少,其中使用了大量的设计模式,值得好好学习.下图是MyBatis的一张架构图,来自Java框架篇—Mybatis 入门. Myba ...

  4. 高性能MySql进化论(九):查询优化器常用的优化方式

    1        介绍 1.1     处理流程 当MYSQL 收到一条查询请求时,会首先通过关键字对SQL语句进行解析,生成一颗“解析树”,然后预处理器会校验“解析树”是否合法(主要校验数据列和表明 ...

  5. iOS 关于枚举的使用

    枚举值 它是一个整形(int)  并且,它不参与内存的占用和释放,枚举定义变量即可直接使用,不用初始化. 在代码中使用枚举的目的只有一个,那就是增加代码的可读性. 使用: 枚举的定义如下: typed ...

  6. Android RadioGroup Fragment Viewpager FragmentPagerAdapter 去哪网Fragment嵌套

    RadioGroup中的各个选择器 <selector xmlns:android="http://schemas.android.com/apk/res/android"& ...

  7. IOS UIButton使用详解

    第一.UIButton的定义 UIButton *button=[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种, typede ...

  8. javascript 获取用户光标,插入文本

    图1 如图1所示,点击[函数名称],将函数名称添加到表达式内容框中,点击参数名称,将参数名称index1作为方法的参数添加到表达式内容中的表达式中. 该功能实现主要是采用了javascript获取鼠标 ...

  9. (Error) The type AESKeyGenerator is not accessible due to restriction on required library.

    error for 'Access restriction: The type AESKeyGenerator is not accessible due to restriction on requ ...

  10. c# 使用递归 循环遍历导航树结构 并解析

    1.数据书库结构 1 家用电器 0 一级菜单 2 手机.数码.京东通信 0 一级菜单 3 电脑.办公 0 一级菜单 4 家具.家居.厨房 0 一级菜单 5 男装.女装.童装.内衣 0 一级菜单 6 个 ...