zoukankan      html  css  js  c++  java
  • COleVariant类

    COleVariant本质上是一个枚举,用同一种类型来表达不同的子类型。如同boost中的variant。

    COLeVariant类是对VARIANT结构的封装。

      VARIANT结构包含两部分。其一是VARIANT型的成员变量vt;其二是个联合类型,这个联合包含了VC常用的几乎所有类型。因为联合用的是相同的存储空间,因此对联合的内容的解释依赖于vt。

      例如:

      若vt的值是VT_UI2,说明该联合被解释为short int。并使用成员变量名iVal。

      若vt的值是VT_BSTR,说明该联合被解释为BSTR类型。并使用成员变量名bstrVal。

      若vt的值是VT_BSTR|VT_BYREF,说明该联合被解释为BSTR型指针。并使用成员变量名pbstrVal。

      它的构造函数具有极为强大的功能,当对象构造时首先调用VariantInit进行初始化,然后根据参数中的标准类型调用相应的构造函数,并使用VariantCopy进行转换赋值操作,当VARIANT对象不在有效范围时,它的析构函数就会被自动调用,由于析构函数调用了VariantClear,因而相应的内存就会被自动清除。除此之外,COLeVariant的赋值操作符在与VARIANT类型转换中为我们提供极大的方便。

      若从数据库返回的是简单类型,如short,long,等,则直接引用既可。注:COLeVariant类重载了“=”操作符,所以常用的类型可以直接转换,     若返回的是字符串类型,则有可能是bstrVal或pbstrVal。依赖于数据库服务程序。BSTR实际上就是个unicode字符串,CString的构造函数和赋值操作都能直接识别这一类型。

    COleVariant功能:
      COleVariant类是对VARIANT结构的封装。它的构造函数具有极为强大的功能:
      1、当对象构造时首先调用VariantInit进行 初始化,然后根据参数中的标准类型调用相应的构造函数,并使用VariantCopy进行转换赋值操作;
      2、当VARIANT对象不在有效范围时,它的析构函 数就会被自动调用,由于析构函数调用了VariantClear,因而相应的内存就会被自动清除。
      COleVariant是数据库常用到的数据类型。它可以是字串,整型值,日期等。知道怎样将它转换为CString很有用处。
      例如:设有CString A; COleVariant B; 来看看怎样将COleVariant转换为CString:
      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;//是布尔值}

  • 相关阅读:
    [bzoj5285][Hnoi2018]寻宝游戏【复杂度分析】
    2020-2021-1 20201229《信息安全专业导论》第十二周学习总结
    2020-2021-1 20201229《信息安全专业导论》第十一周学习总结
    2020-2021-1 20201229《信息安全专业导论》第十周学习总结
    2020-2021-1 20201229 《信息安全专业导论》第九周学习总结
    熟悉编程语言
    2020-2021-1 20201229 《信息安全专业导论》第八周学习总结
    如何学好编程
    2020-2021-1 20201229 《信息安全专业导论》 第七周学习总结
    实现进制转化伪代码
  • 原文地址:https://www.cnblogs.com/wjq13752525588/p/11790865.html
Copyright © 2011-2022 走看看