转:MFC之COleVariant
COleVariant 本质上是一个枚举,用同一种类型来表达不同的子类型。如同boost中的variant。
例子
- COleVariant var(3.6f);
- float v = var.fltVal;
- CString str("testCOleVariant");
- COleVariant var2(str);
- CString cpStr(var2.bstrVal);
例子
- CString CMFCPropertyGridProperty::m_strFormatChar = _T("%c");
- CString CMFCPropertyGridProperty::m_strFormatShort = _T("%d");
- CString CMFCPropertyGridProperty::m_strFormatLong = _T("%ld");
- CString CMFCPropertyGridProperty::m_strFormatUShort = _T("%u");
- CString CMFCPropertyGridProperty::m_strFormatULong = _T("%u");
- CString CMFCPropertyGridProperty::m_strFormatFloat = _T("%f");
- CString CMFCPropertyGridProperty::m_strFormatDouble = _T("%lf");
- CString CMFCPropertyGridProperty::FormatProperty()
- {
- ASSERT_VALID(this);
- ASSERT_VALID(m_pWndList);
- COleVariant& var = m_varValue;
- CString strVal;
- .............
- switch (var.vt)
- {
- case VT_BSTR:
- strVal = var.bstrVal;
- break;
- case VT_I2:
- strVal.Format(m_strFormatShort, (short)var.iVal);
- break;
- case VT_I4:
- case VT_INT:
- strVal.Format(m_strFormatLong, (long)var.lVal);
- break;
- case VT_UI1:
- if ((BYTE)var.bVal != 0)
- {
- strVal.Format(m_strFormatChar, (TCHAR)(BYTE)var.bVal);
- }
- break;
- case VT_UI2:
- strVal.Format( m_strFormatUShort, var.uiVal);
- break;
- case VT_UINT:
- case VT_UI4:
- strVal.Format(m_strFormatULong, var.ulVal);
- break;
- case VT_R4:
- strVal.Format(m_strFormatFloat, (float)var.fltVal);
- break;
- case VT_R8:
- strVal.Format(m_strFormatDouble, (double)var.dblVal);
- break;
- case VT_BOOL:
- strVal = var.boolVal == VARIANT_TRUE ? m_pWndList->m_strTrue : m_pWndList->m_strFalse;
- break;
- default:
- // Unsupported type
- strVal = _T("*** error ***");
- }
- return strVal;
- }
COleVariant框架内容
- class COleVariant : public tagVARIANT
- {
- COleVariant(LPCTSTR lpszSrc);
- COleVariant(LPCTSTR lpszSrc, VARTYPE vtSrc); // used to set to ANSI string
- COleVariant(CString& strSrc);
- COleVariant(BYTE nSrc);
- COleVariant(short nSrc, VARTYPE vtSrc = VT_I2);
- COleVariant(long lSrc, VARTYPE vtSrc = VT_I4);
- COleVariant(const COleCurrency& curSrc);
- COleVariant(float fltSrc);
- COleVariant(double dblSrc);
- COleVariant(const COleDateTime& timeSrc);
- ....................................
- const COleVariant& operator=(float fltSrc);
- const COleVariant& operator=(double dblSrc);
- const COleVariant& operator=(const COleDateTime& dateSrc);
- const COleVariant& operator=(const CByteArray& arrSrc);
- const COleVariant& operator=(const CLongBinary& lbSrc);
- };
- void Clear();
- void ChangeType(VARTYPE vartype, LPVARIANT pSrc = NULL);
- void Attach(VARIANT& varSrc);
- VARIANT Detach();
- void GetByteArrayFromVariantArray(CByteArray& bytes);
- void SetString(LPCTSTR lpszSrc, VARTYPE vtSrc); // used to set ANSI string
- operator LPVARIANT();
- operator LPCVARIANT() const
- /
- struct tagVARIANT
- { union
- {
- struct __tagVARIANT
- {
- VARTYPE vt;
- .......................
- union
- {
- LONGLONG llVal;
- LONG lVal;
- BYTE bVal;
- SHORT iVal;
- FLOAT fltVal;
- DOUBLE dblVal;
- ...........
- DATE date;
- BSTR bstrVal;
- IUnknown *punkVal;
- IDispatch *pdispVal;
- ..............
- }
- COleVariant::COleVariant(float fltSrc)
- { vt = VT_R4; fltVal = fltSrc; }
- _AFXDISP_INLINE COleVariant::COleVariant(CString& strSrc)
- { vt = VT_EMPTY; *this = strSrc; }
- const COleVariant& COleVariant::operator=(const CString& strSrc)
- {
- // Free up previous VARIANT
- Clear();
- vt = VT_BSTR;
- bstrVal = strSrc.AllocSysString();
- return *this;
- }
- typedef unsigned short VARTYPE;
- /*
- * VARENUM usage key,
- *
- * * [V] - may appear in a VARIANT
- * * [T] - may appear in a TYPEDESC
- * * [P] - may appear in an OLE property set
- * * [S] - may appear in a Safe Array
- *
- *
- * VT_EMPTY [V] [P] nothing
- * VT_NULL [V] [P] SQL style Null
- * VT_I2 [V][T][P][S] 2 byte signed int
- * VT_I4 [V][T][P][S] 4 byte signed int
- * VT_R4 [V][T][P][S] 4 byte real
- * VT_R8 [V][T][P][S] 8 byte real
- * VT_CY [V][T][P][S] currency
- * VT_DATE [V][T][P][S] date
- * VT_BSTR [V][T][P][S] OLE Automation string
- * VT_DISPATCH [V][T] [S] IDispatch *
- * VT_ERROR [V][T][P][S] SCODE
- * VT_BOOL [V][T][P][S] True=-1, False=0
- * VT_VARIANT [V][T][P][S] VARIANT *
- * VT_UNKNOWN [V][T] [S] IUnknown *
- * VT_DECIMAL [V][T] [S] 16 byte fixed point
- .......................................
- enum VARENUM
- { VT_EMPTY = 0,
- VT_NULL = 1,
- VT_I2 = 2,
- VT_I4 = 3,
- VT_R4 = 4,
- VT_R8 = 5,
- VT_CY = 6,
- VT_DATE = 7,
- VT_BSTR = 8,
- .........................................
- } ;
转载于:https://www.cnblogs.com/yfz0/p/5862089.html
转:MFC之COleVariant相关推荐
- MFC之COleVariant类
COleVariant 本质上是一个枚举,用同一种类型来表达不同的子类型.如同boost中的variant. COleVariant类是对VARIANT结构的封装. VARIANT 结构包含两部分.其 ...
- MFC之COleVariant
COleVariant 本质上是一个枚举,用同一种类型来表达不同的子类型.如同boost中的variant. 例子 COleVariant var(3.6f); float v = var.fltVa ...
- MFC中使用COleVariant获取CMFCPropertyGridProperty属性窗口某个属性值
获取MFC属性窗口CMFCPropertyGridProperty中某个item的值时,如果不小心写错了类型,就会导致获取的结果不正确,原因就是COleVariant其实继承自一个特殊的结构体ta ...
- 如何使用MFC和类型库创建自动化项目
摘要 本文详细介绍了如何自动化像Microsoft Office这样支持COM的应用程序. 更多信息 下面部分介绍了如何创建MFC项目.采用Microsoft Excel举例,你可以将前8个步骤用于任 ...
- 利用vc的mfc做的Excel表格处理工具
下面两个文件是逻辑处理文件.已经调通. CExcelmadetoolDlg.h 在这里插入代码片 // ExcelmadetoolDlg.h : header file //#if !defined( ...
- MFC中字符间相互转换总结
1.char*转CString char szPath[50]; CString str; str.Format("%s",szPath); 2.char*转int int nrO ...
- mfc创建一个word操作工程 【转自:http://blog.csdn.net/tg2003/article/details/4399981】
转自 http://www.cnblogs.com/zhangyin/archive/2007/03/04/663345.html 1.在VC中新建一控制台程序,选支持MFC(当然,你也可以不选择支持 ...
- 《MFC初探》之变量类型
From:https://blog.csdn.net/a1459268562/article/details/70653695 MFC常用数据类型:https://www.cnblogs.com/xz ...
- VS2008中C++打开Excel(MFC)
第一步:建立project 选择C++下的MFC Application 选择dialog based,中文.之后点击finish 第二步:导入EXCEL头文件 选择Project->AddCl ...
最新文章
- JwtBearer -- Http身份验证
- 设计模式:单例模式之双重检查
- Oracle创建表空间、用户、分配权限语句
- python图像识别步骤_利用百度智能云结合Python体验图像识别(转载来自qylruirui)
- JZOJ 5419. 【NOIP2017提高A组集训10.24】筹备计划
- springmvc controller动态设置content-type
- 安卓平板usb变显示器_RJ45与USB信号接入工业显示器有何不同?
- 疑似禁令影响开始显现:华为Mate 40量产或被迫推迟
- 聚焦BCS|新华财经:奇安信董事长齐向东:网络安全市场规模10年将增长10倍
- 自定义Json解析工具
- 关于uniapp全量更新、增量更新-app端
- pert图java_项目管理之甘特图和工程网络图(PERT图)(一)
- React脚手架搭建及创建React项目
- ssh远程登录阿里云服务器
- 零拷贝、如何实现零拷贝、大文件如何传输
- 计算机开机出现ROM,电脑无法开机并显示EXITING INTEL PXE ROM如何解决
- Oracle CTAS
- smbus协议的command_SMBus读取从设备数据总结
- 纯Java实现PDF转txt文件
- silabs 定时器PWM配置