转: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,
- .........................................
- } ;
转:MFC之COleVariant的更多相关文章
- 魔改——MFC SDI 支持 内嵌 EXCEL OLE
==================================声明================================== 本文版权归作者所有 未经作者授权 请勿转载 保留法律追究的 ...
- MFC vs2012 Office2013 读写excel文件
近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,这里本以为很简单,结果...废话少说,过程如下: 笔者环境:win7 64+VS2012+Office2 ...
- VS2010 MFC对Excel的操作
这是帮别人做项目遇到的一个问题,的那个是纠结了老长时间,本以为是一件很轻松的事... 首先,这里采用了OLE来对Excel进行操作,网上其实有大把的例子,虽然都可以运行,但是并不能满足项目要求,其实我 ...
- VS2008基于对话框的MFC上位机串口通信(C++实现)简单例程
首先,在 vs2008 环境下创建 MFC 运用程序 设置项目名称为 ComTest(这个地方随意命名,根据个人习惯),点击确定后,点击下一步 出现如下界面 选择"基于对话框"模式 ...
- MFC 简单输出EXCEL - (OLE)
三图胜千言: 就是酱紫: //打印领料表 void CKnifeDlgDlg::PrintCurUsedTabel(int order) { // TODO: Add your command han ...
- VS2010下MFC的串口编程
串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串 ...
- MFC -- Excel操作简介(基于VS2010)
一.添加与 Excel 操作相关的头文件 项目 -> 类向导,在右上方有一个下拉栏,选择其中的 类型库中的MFC类(T),即可看到下图所示界面,选择“文件”选项,然后在下方的位置选项中添加本地文 ...
- (转载)用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信
此文章以visual C++数据採集与串口通信測控应用实战为參考教程 此文章适合VC++串口通信入门 一.页面布局及加入控件 1, 安装好vs2010如图 2, 新建一个基于VC++的MFC项目com ...
- MFC【6】文件I/O和串行化
文件输入和输出(I/O)服务是所有操作系统的主要工作.Microsoft Windows提供了各种API函数用来读.写和操作磁盘文件.MFC将这些桉树和CFile类融合在面对对象的模型里.其中CFil ...
随机推荐
- 11th day
今天MySQL数据库的基本知识就学完了,明天开始做小项目什么的,有点小激动啊... <?php // 定义$sql语句执行函数 function my_query($sql){ $result ...
- 加载GIF动画方法 iOS
方法一 使用UIWebView _codeStr为gif网址 如果是本地的gif可以直接使用dataWithContentsOfFile方法 NSData *data = [NSData d ...
- ios解析XML和json数据
解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数 ...
- NYOJ 491 幸运三角形
幸运三角形 import java.util.Scanner; public class Main{//搜索 static int sum=0,n; public static void main(S ...
- 通过cocos2d-x的CCGLProgram和CCShaderCache的实现来分析OpenGL ES中的Shader编程
在OpenGL ES中,Shader是着色器,包括两种:顶点着色器(Vertex Shader)和片元着色器(Fragment Shader).每个program对象有且仅有一个Vertex Shad ...
- pull解析和sax解析的差别
假设在一个XML文档中我们仅仅须要前面一部分数据.可是使用SAX方式或DOM方式会对整个文档进行解析,虽然XML文档中后面的大部分数据我们事实上都不须要解析.因此这样实际上就浪费了处理资源. 使用PU ...
- Linux cpuinfo 详解
在Linux系统中,如何详细了解CPU的信息呢? 当然是通过cat /proc/cpuinfo来检查了,但是比如几个物理CPU/几核/几线程,这些问题怎么确定呢? 经过查看,我的开发机器是1个物理C ...
- [转] C++11带来的move语义
PS: 通过引入接收右值的函数形参,可以通过接收右值来实现高效 PS在C++11中,标准库在<utility>中提供了一个有用的函数std::move,这个函数的名字具有迷惑性,因为实际上 ...
- RunTime 应用实例–关于埋点的思考
埋点是现在很多App中都需要用到的,这个问题可能每个人都能处理,但是怎样来减少埋点所带来的侵入性,怎样用更加简洁的方式来处理埋点问题,怎样减少误埋,如果上线了发现少埋了怎么办?下面是本文讨论的重点: ...
- session绑定javaBean
1.HttpSessionBindingListener 这个监听器,可以让javaBean对象,感知它被绑定到session中或从session中移除.2.HttpSessionActivati ...