【温故而知新】C和C++篇外篇:COleVariant类型「建议收藏」

【温故而知新】C和C++篇外篇:COleVariant类型「建议收藏」今天在做一个windows平台的小工具顺便熟悉一下windows开发的一些基础知识,在这个过程中,发现了

大家好,又见面了,我是你们的朋友全栈君。

今天在做一个windows平台的小工具顺便熟悉一下windows开发的一些基础知识,在这个过程中,发现了MFC使用了一种数据类型叫做COleVariant类型,感觉比较新鲜,赶忙到网上查一下,做一下记录,以备以后查看。

COleVariant类型的变量提供了一种强大的数据封装格式,可以将不同类型的数据用这一种变量表示,并且进行各种格式的转换也很方便。这个变量定义在afxdisp.h 中:

class COleVariant : public tagVARIANT
{
// Constructors
public:
	COleVariant();

	COleVariant(const VARIANT& varSrc);
	COleVariant(LPCVARIANT pSrc);
	COleVariant(const COleVariant& varSrc);

	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);

#if (_WIN32_WINNT >= 0x0501) || defined(_ATL_SUPPORT_VT_I8)
	COleVariant(LONGLONG nSrc);
	COleVariant(ULONGLONG nSrc);
#endif

	COleVariant(float fltSrc);
	COleVariant(double dblSrc);
	COleVariant(const COleDateTime& timeSrc);

	COleVariant(const CByteArray& arrSrc);
	COleVariant(const CLongBinary& lbSrc);

	COleVariant(LPCITEMIDLIST pidl);

// Operations
public:
	void Clear();
	void ChangeType(VARTYPE vartype, LPVARIANT pSrc = NULL);
	void Attach(VARIANT& varSrc);
	VARIANT Detach();
   void GetByteArrayFromVariantArray(CByteArray& bytes);

	BOOL operator==(const VARIANT& varSrc) const;
	BOOL operator==(LPCVARIANT pSrc) const;

	const COleVariant& operator=(const VARIANT& varSrc);
	const COleVariant& operator=(LPCVARIANT pSrc);
	const COleVariant& operator=(const COleVariant& varSrc);

	const COleVariant& operator=(const LPCTSTR lpszSrc);
	const COleVariant& operator=(const CString& strSrc);

	const COleVariant& operator=(BYTE nSrc);
	const COleVariant& operator=(short nSrc);
	const COleVariant& operator=(long lSrc);
	const COleVariant& operator=(const COleCurrency& curSrc);

#if (_WIN32_WINNT >= 0x0501) || defined(_ATL_SUPPORT_VT_I8)
	const COleVariant& operator=(LONGLONG nSrc);
	const COleVariant& operator=(ULONGLONG nSrc);
#endif

	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 SetString(LPCTSTR lpszSrc, VARTYPE vtSrc); // used to set ANSI string

	operator LPVARIANT();
	operator LPCVARIANT() const;

// Implementation
public:
	~COleVariant();
};

COleVariant类型可以保存的数据有字符串、长短整型、浮点型、布尔型、日期等。从COleVariant变量导出数据也很方便,根据这篇参考文献的描述,可以使用以下方法很方便地将COleVariant转化为字符串:

switch(B.vt){

case VT_BSTR:   A=V_BSTRT(&B); break;//COleVariant是一个字串

case VT_I2:   A.Format(_T("%hd"),V_I2(&B));break;//是短整型

case VT_I4:   A.Format(_T("%d"),V_I4(&B));break;//是长整型

case VT_R4:   A.Format(_T("%e"),(double)V_R4(&B));break;//是浮点数

case VT_R8:   A.Format(_T("%e"),V_R8(&B));break;//是浮点数

case VT_CY:   A=COleCurrency(B).Format();break;//是货币值

case VT_DATE: A=COleDateTime(B).Format("%Y-%m-%d");break;//是日期

case VT_BOOL: A=V_BOOL(&B)?"True":"False";break;//是布尔值

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161063.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 手把手教你搭建Android开发环境

    手把手教你搭建Android开发环境搭建开发环境,是学习一门技术的开始。参照网上的教程,整理了一下。进行Android开发应用开发时,首先需要有JDK和AndroidSDK的支持,还需要开发工具。在AndriodStudio2.2开始,安装AndroidStudio时,会自动安装JDK和AndroidSDK。下载网址:https://developer.android.google.cn/studio/一、进入网址,点击下载安卓工作室(原英文版,翻译后的界面了)二、点击下载后,出现协议界面,勾选同意,下载。三、双击刚

  • sql Server配置管理器[通俗易懂]

    sql Server配置管理器[通俗易懂]一个是书里的,一个是我的,对比一下一:管理SQLServer2008服务开始—-所有程序—-MicrosoftSQLServer2008R2—-配置工具—-SQL Server配置管理器  …

  • tensorflow 层_win7怎么扩展屏幕

    tensorflow 层_win7怎么扩展屏幕前言读TensorFlow相关代码看到了STN的应用,搜索以后发现与增强网络对图像变换(旋转、缩放、偏移等)的抗干扰能力,简单说就是提高卷积神经网络的空间不变性。国际惯例,参考博客:理解SpatialTransformerNetworksgithub-STNDeepLearningPaperImplementations:SpatialTransformerNetwork…

  • SMTP协议介绍_介绍给别人怎么写合同

    SMTP协议介绍_介绍给别人怎么写合同1、SMTP介绍基本概念SMTP(SimpleMailTransferProtocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则

    2022年10月22日
  • vue漂亮的树控件_前端树形控件

    vue漂亮的树控件_前端树形控件实现效果与原理我们希望实现鼠标移动至树型结构的结点上就显示按钮,移出就隐藏按钮实现原理:是通过@mouseenter和@mouseleave两个属性来控制鼠标hover的效果,再配合v-sho

  • 安卓逆向_9 — log 插桩、Toast 弹窗、smali代码编写和植入 ( 好搜小说 )

    安卓逆向_9 — log 插桩、Toast 弹窗、smali代码编写和植入 ( 好搜小说 )From:https://www.bilibili.com/video/BV1UE411A7rW?p=36如果仅仅用Smali来分析代码,效果其实不如用dex2jar和jd-gui更直观,毕竟看反编译的java代码要更容易一些。但Smali强大之处就是可以随心所欲的进行插桩操作。何为插桩,引用一下wiki的解释:程序插…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号