【温故而知新】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)


相关推荐

  • 分享ArcGis For Flex API 1.3 Diagram

    分享ArcGis For Flex API 1.3 Diagram

  • win7系统opc服务器配置,win7 设置opc服务器

    win7系统opc服务器配置,win7 设置opc服务器win7设置opc服务器内容精选换一换创建媒体处理服务配置项。媒体处理服务配置项用于媒体处理服务中获取相关授权。参数和对应说明如表1。MpcConfigmpcConfig=newMpcConfig();mpcConfig.setEndPoint(“endPoint”);//设置转码节点地址mpcConfig.setProjectId(华为云帮助中心,为用户提供产品简介、价格说明、购买…

  • java8 reduce的用法_Java 8系列之Stream中万能的reduce用法说明

    java8 reduce的用法_Java 8系列之Stream中万能的reduce用法说明reduce操作可以实现从Stream中生成一个值,其生成的值不是随意的,而是根据指定的计算模型。比如,之前提到count、min和max方法,因为常用而被纳入标准库中。事实上,这些方法都是reduce操作。reduce方法有三个override的方法:Optionalreduce(BinaryOperatoraccumulator);Treduce(Tidentity,BinaryO…

    2022年10月31日
  • montavuego_Vue.js+Flask+MongoDB

    montavuego_Vue.js+Flask+MongoDBMongoVUE是一个可以操作mongodb的图形化客户端,方面查看等使用; 一、下载MongoVUE(绿色激活成功教程版):http://download.csdn.net/detail/u011694549/5945519二、解压,打开文件夹:           三、启动MongoVUE.exe         四、建立连接,即可访问数据库了

  • 开启1521端口监听_服务器1521端口被关闭,如何开启?

    开启1521端口监听_服务器1521端口被关闭,如何开启?展开全部方法如下:1、修改远程桌面连接端口:(1)远程桌面终端服务默认端口为“3389”,为防止他人进行恶意连接,就需要32313133353236313431303231363533e78988e69d8331333365633964对默认端口进行更改。(2)对此可打开注册表编辑器,依次展开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\…

  • 实战篇-OpenSSL之TripleDES加密算法-CFB64模式[通俗易懂]

    本文属于《OpenSSL加密算法库使用系列教程》之一,欢迎查看其它文章。实战篇-OpenSSL之TripleDES加密算法-CFB64模式一、TripleDES简介二、CFB64模式1、命令行操作2、函数说明3、编程实现(1)特别注意(2)实现CFB64模式加解密(3)测试代码一、TripleDES简介3DES又称TripleDES,是DES加密算法的一种模式,它使用2条不同的56位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年

发表回复

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

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