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

例子

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

例子

[cpp] view plaincopy
  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框架内容

[cpp] view plaincopy
  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. } ;

转载于:https://www.cnblogs.com/yfz0/p/5862089.html

转:MFC之COleVariant相关推荐

  1. MFC之COleVariant类

    COleVariant 本质上是一个枚举,用同一种类型来表达不同的子类型.如同boost中的variant. COleVariant类是对VARIANT结构的封装. VARIANT 结构包含两部分.其 ...

  2. MFC之COleVariant

    COleVariant 本质上是一个枚举,用同一种类型来表达不同的子类型.如同boost中的variant. 例子 COleVariant var(3.6f); float v = var.fltVa ...

  3. MFC中使用COleVariant获取CMFCPropertyGridProperty属性窗口某个属性值

      获取MFC属性窗口CMFCPropertyGridProperty中某个item的值时,如果不小心写错了类型,就会导致获取的结果不正确,原因就是COleVariant其实继承自一个特殊的结构体ta ...

  4. 如何使用MFC和类型库创建自动化项目

    摘要 本文详细介绍了如何自动化像Microsoft Office这样支持COM的应用程序. 更多信息 下面部分介绍了如何创建MFC项目.采用Microsoft Excel举例,你可以将前8个步骤用于任 ...

  5. 利用vc的mfc做的Excel表格处理工具

    下面两个文件是逻辑处理文件.已经调通. CExcelmadetoolDlg.h 在这里插入代码片 // ExcelmadetoolDlg.h : header file //#if !defined( ...

  6. MFC中字符间相互转换总结

    1.char*转CString char szPath[50]; CString str; str.Format("%s",szPath); 2.char*转int int nrO ...

  7. mfc创建一个word操作工程 【转自:http://blog.csdn.net/tg2003/article/details/4399981】

    转自 http://www.cnblogs.com/zhangyin/archive/2007/03/04/663345.html 1.在VC中新建一控制台程序,选支持MFC(当然,你也可以不选择支持 ...

  8. 《MFC初探》之变量类型

    From:https://blog.csdn.net/a1459268562/article/details/70653695 MFC常用数据类型:https://www.cnblogs.com/xz ...

  9. VS2008中C++打开Excel(MFC)

    第一步:建立project 选择C++下的MFC Application 选择dialog based,中文.之后点击finish 第二步:导入EXCEL头文件 选择Project->AddCl ...

最新文章

  1. JwtBearer -- Http身份验证
  2. 设计模式:单例模式之双重检查
  3. Oracle创建表空间、用户、分配权限语句
  4. python图像识别步骤_利用百度智能云结合Python体验图像识别(转载来自qylruirui)
  5. JZOJ 5419. 【NOIP2017提高A组集训10.24】筹备计划
  6. springmvc controller动态设置content-type
  7. 安卓平板usb变显示器_RJ45与USB信号接入工业显示器有何不同?
  8. 疑似禁令影响开始显现:华为Mate 40量产或被迫推迟
  9. 聚焦BCS|新华财经:奇安信董事长齐向东:网络安全市场规模10年将增长10倍
  10. 自定义Json解析工具
  11. 关于uniapp全量更新、增量更新-app端
  12. pert图java_项目管理之甘特图和工程网络图(PERT图)(一)
  13. React脚手架搭建及创建React项目
  14. ssh远程登录阿里云服务器
  15. 零拷贝、如何实现零拷贝、大文件如何传输
  16. 计算机开机出现ROM,电脑无法开机并显示EXITING INTEL PXE ROM如何解决
  17. Oracle CTAS
  18. smbus协议的command_SMBus读取从设备数据总结
  19. 纯Java实现PDF转txt文件
  20. silabs 定时器PWM配置

热门文章

  1. Java实现了任意位置截屏(仿QQ截图)
  2. 手机app内测都有哪些测试,怎么测试?
  3. c语言字符串之拷贝函数
  4. Java Servlet 非英文乱码
  5. Python 二进制,十进制,十六进制转换
  6. 计算机的启动方式(冷启动、热启动、复位启动)、注销、待机
  7. 大V推荐!高级java工程师面试题库
  8. java反编译工具怎么安装_java反编译工具Jode Decompiler的Eclipse插件安装与使用
  9. 从一个晶体管到一台计算机(01-晶体管)
  10. 如何看Analysis分析图