【温故而知新】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;//是布尔值

}

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

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

(0)
上一篇 2022年7月18日 下午7:16
下一篇 2022年7月18日 下午7:36


相关推荐

  • 让 AI 跑在自家电脑上:AMD 发布 RyzenClaw 与 RadeonClaw 参考方案

    让 AI 跑在自家电脑上:AMD 发布 RyzenClaw 与 RadeonClaw 参考方案

    2026年3月17日
    2
  • c语言进销存系统设计代码,web版进销存系统 – WEB源码|源代码 – 源码中国[通俗易懂]

    c语言进销存系统设计代码,web版进销存系统 – WEB源码|源代码 – 源码中国[通俗易懂]压缩包:webjxc.rar列表mrEMS\DB_51aspx\db_CMS_Data.MDFmrEMS\DB_51aspx\db_CMS_Log.LDFmrEMS\EMS\001.icomrEMS\EMS\BaseClass\BaseInfo.csmrEMS\EMS\BaseClass\BaseInfo.cs.bakmrEMS\EMS\BaseClass\DataBase.csmrEMS\…

    2022年5月31日
    35
  • webservice实例java_Java WebService(实战) 简单实例

    webservice实例java_Java WebService(实战) 简单实例一、准备工作(以下为本实例使用工具)1、MyEclipse10.7.12、JDK1.6.0_22二、创建服务端1、创建【WebServiceProject】,命名为【TheService】。2、创建【Class】类,命名为【ServiceHello】,位于【com.hyan.service】包下。3、编写供客户端调用的方法,即编译方法代码。4、进行编译说明:编译失败的话,请将该项目引用的jd…

    2022年7月21日
    17
  • 电驴怎么显示服务器列表,(转)如何更新电驴服务器列表(eMule Server List)

    电驴怎么显示服务器列表,(转)如何更新电驴服务器列表(eMule Server List)电驴上的丰富资源让我们眼馋,尤其是一些国外的大片资源。但是往往出现不能下载的情况。其实原因就是出在电驴服务器列表上,我们常用的电驴服务器列表都是www.emule.org.cn提供的他并不包含一些国外的服务器列表,所以就引起了某些国外资源下载不了。其实只要大家更新一下电驴服务器列表就可以解决这个小问题。上哪去找电驴服务器列表呢?当然有网站为我们做好了服务,ed2k.2x4u.de就是这样的一个网站…

    2022年6月22日
    74
  • 如何安装Windows操作系统

    如何安装Windows操作系统博主喜欢以最原始最直接的方式安装系统,并且不喜欢安装Ghost、精简、修改等等各种操作系统,在这里分享一个一直在用,看起来麻烦博主却觉得最适合个人安装操作系统的方式,请往下看,欢迎指正交流分享一、关于如何选择操作系统这里只说Windows7、Windows8、Windows8.1以及Windows10,博主倾向于在Windows7和Windows10中二选一,有很多同学习…

    2022年6月2日
    53
  • js如何在控制台打印?

    js如何在控制台打印?转自 http blog csdn net cy88310 article details 在 js 中右中全局方法可以在控制台 console 中打印信息 1 console log 11 2 console info 11 3 console warn 33 4 console error 55 在浏览器端 按下 F12 可以打开浏览器的 con

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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