精华内容
下载资源
问答
  • Variant 数据类型介绍

    千次阅读 2013-12-12 11:42:56
    Variant 数据类型是所有没被显式声明(用如 Dim、Private、Public 或 Static等语句)为其他类型变量的数据类型。Variant 数据类型并没有类型声明字符。 Variant 是一种特殊的数据类型,除了定长String数据及...

    Variant 数据类型是所有没被显式声明(用如 Dim、Private、Public 或 Static等语句)为其他类型变量的数据类型。Variant 数据类型并没有类型声明字符。

    Variant 是一种特殊的 数据类型,除了定长 String数据及用户定义类型外,可以包含任何种类的数据。Variant 也可以包含 Empty、Error、 NothingNull等特殊值。可以用 VarType函数或 TypeName 函数来决定如何处理 Variant 中的数据。
    数值数据可以是任何整型或实型数,负数时范围从 -1.797693134862315E308 到 -4.94066E-324,正数时则从 4.94066E-324 到 1.797693134862315E308。通常,数值Variant 数据保持为其 Variant 中原来的数据类型。例如,如果把一个 Integer赋值给 Variant,则接下来的运算会把此 Variant 当成 Integer 来处理。然而,如果算术运算针对含 Byte、Integer、Long 或 Single 之一的Variant 执行,并当结果超过原来数据类型的正常范围时,则在 Variant 中的结果会提升到较大的数据类型。如 Byte则提升到 Integer,Integer 则提升到 Long,而 Long和Single 则提升为 Double。当 Variant 变量中有 Currency、Decimal 及 Double 值超过它们各自的范围时,会发生错误。

    VARIANT支持的类型,也就是vt成员的取值如表4-3所示。
    表4-3 VARIANT支持的类型
     
    类型名
    含义
    VT_EMPTY
    指示未指定值
    VT_NULL
    指示空值(类似于 SQL 中的空值)
    VT_I2
    指示 short 整数
    VT_I4
    指示 long 整数
    VT_R4
    指示 float 值
    VT_R8
    指示 double 值
    VT_CY
    指示货币值
    VT_DATE
    指示 DATE 值
    VT_BSTR
    指示 BSTR 字符串
    VT_DISPATCH
    指示 IDispatch 指针
    VT_ERROR
    指示 SCODE
    VT_BOOL
    指示一个布尔值
    VT_VARIANT
    指示 VARIANTfar 指针
    VT_UNKNOWN
    指示 IUnknown 指针
    VT_DECIMAL
    指示 decimal 值
    VT_I1
    指示 char 值
    (续表)
    类型名
    含义
    VT_UI1
    指示 byte
    VT_UI2
    指示 unsignedshort
    VT_UI4
    指示 unsignedlong
    VT_I8
    指示 64 位整数
    VT_UI8
    指示 64 位无符号整数
    VT_INT
    指示整数值
    VT_UINT
    指示 unsigned 整数值
    VT_VOID
    指示 C 样式 void
    VT_HRESULT
    指示 HRESULT
    VT_PTR
    指示指针类型
    VT_SAFEARRAY
    指示 SAFEARRAY
    VT_CARRAY
    指示 C 样式数组
    VT_USERDEFINED
    指示用户定义的类型
    VT_LPSTR
    指示一个以 NULL 结尾的字符串
    VT_LPWSTR
    指示由 nullNothingnullptrnull引用(在 Visual Basic 中为 Nothing) 终止的宽字符串
    VT_RECORD
    指示用户定义的类型
    VT_FILETIME
    指示 FILETIME 值
    VT_BLOB
    指示以长度为前缀的字节
    VT_STREAM
    指示随后是流的名称
    VT_STORAGE
    指示随后是存储的名称
    VT_STREAMED_OBJECT
    指示流包含对象
    VT_STORED_OBJECT
    指示存储包含对象
    VT_BLOB_OBJECT
    指示 Blob 包含对象
    VT_CF
    指示剪贴板格式
    VT_CLSID
    指示类 ID
    VT_VECTOR
    指示简单的已计数数组
    VT_ARRAY
    指示 SAFEARRAY 指针
    VT_BYREF
    指示值为引

    展开全文
  • VARIANT 类型说明

    千次阅读 2017-06-15 18:12:16
    string CAdoConnection::VariantToString(const _variant_t &var) { string strValue; TCHAR szValue[1024] = {0x00}; switch (var.vt) { case VT_BSTR://字符串 case VT_LPSTR://字符串 case VT_LPWSTR://...
    
    string CAdoConnection::VariantToString(const _variant_t &var)
    {
    	string strValue;
    	TCHAR szValue[1024] = {0x00};
    
    	switch (var.vt)
    	{
    	case VT_BSTR://字符串
    	case VT_LPSTR://字符串
    	case VT_LPWSTR://字符串
    		strValue = (LPCTSTR)(_bstr_t)var;
    		break;
    
    	case VT_I1:
    	case VT_UI1:
    		_stprintf(szValue, _T("%d"), var.bVal);
    		strValue = szValue;
    		break;
    
    	case VT_I2://短整型
    		_stprintf(szValue, _T("%d"), var.iVal);
    		strValue = szValue;
    		break;
    
    	case VT_UI2://无符号短整型
    		_stprintf(szValue, _T("%d"), var.uiVal);
    		strValue = szValue;
    		break;
    
    	case VT_INT://整型
    		_stprintf(szValue, _T("%d"), var.intVal);
    		strValue = szValue;
    		break;
    
    	case VT_I4: //整型
    		_stprintf(szValue, _T("%d"), var.lVal);
    		strValue = szValue;
    		break;
    
    	case VT_I8: //长整型
    		_stprintf(szValue, _T("%ld"), var.bVal);
    		strValue = szValue;
    		break;
    
    	case VT_UINT://无符号整型
    		_stprintf(szValue, _T("%u"), var.uintVal);
    		strValue = szValue;
    		break;
    
    	case VT_UI4: //无符号整型
    		_stprintf(szValue, _T("%u"), var.ulVal);
    		strValue = szValue;
    		break;
    
    	case VT_UI8: //无符号长整型
    		_stprintf(szValue, _T("%u"), var.ulVal);
    		strValue = szValue;
    		break;
    
    	case VT_VOID:
    		_stprintf(szValue, _T("%8x"), (unsigned int)var.byref);
    		strValue = szValue;
    		break;
    
    	case VT_R4://浮点型
    		_stprintf(szValue, _T("%.4f"), var.fltVal);
    		strValue = szValue;
    		break;
    
    	case VT_R8://双精度型
    		_stprintf(szValue, _T("%.8f"), var.dblVal);
    		strValue = szValue;
    		break;
    
    	case VT_DECIMAL: //小数
    		_stprintf(szValue, _T("%.8f"), (double)var);
    		strValue = szValue;
    		break;
    
    	case VT_CY:
    		{
    			COleCurrency cy = var.cyVal;
    			strValue = cy.Format();
    		}
    		break;
    
    	case VT_BLOB:
    	case VT_BLOB_OBJECT:
    	case 0x2011:
    		strValue = "[BLOB]";
    		break;
    
    	case VT_BOOL://布尔型
    		strValue = var.boolVal ? "TRUE" : "FALSE";
    		break;
    
    	case VT_DATE: //日期型
    		{
    			DATE dt = var.date;
    			COleDateTime da = COleDateTime(dt); 
    			strValue = da.Format("%Y-%m-%d %H:%M:%S");
    		}
    		break;
    
    	case VT_NULL://NULL值
    		strValue = "VT_NULL";
    		break;
    
    	case VT_EMPTY://空
    		strValue = "";
    		break;
    
    	case VT_UNKNOWN://未知类型
    	default:
    		strValue = "UN_KNOWN";
    		break;
    	}
    
    	return strValue;
    }
    

    展开全文
  • c++17可用variant,实现多类型变量。比起optional,自由度更高。 如下代码判断一个数字是否大于5,如果大于5,输出bignumber,否则输出enum值 #include <iostream> #include <variant> #include <...

    c++17可用variant,实现多类型变量。比起optional,自由度更高。
    如下代码判断一个数字是否大于5,如果大于5,输出bignumber,否则输出enum值

    #include <iostream>
    #include <variant>
    #include <string>
    
    enum class ErrorCode {
    	BIGNUMBER = 0, SMALLNUMBER=1, ERROR=2
    };
    
    std::variant<std::string, ErrorCode> NumberGame(int number) {
    	std::variant<std::string, ErrorCode> name;
    	if (number > 5) {
    		name = "big number";
    	}
    	else {
    		name = ErrorCode::SMALLNUMBER;
    	}
    	return name;
    
    }
    
    int main() {
    	auto name = NumberGame(4);
    	if (std::get_if<std::string>(&name)) {
    		std::cout << std::get<std::string>(name);
    	}
    	else {
    		auto a =  std::get<ErrorCode>(name);
    		if (a == ErrorCode::SMALLNUMBER) {
    			std::cout << 1;
    		}
    	}
    	
    }
    

    输出:1

    展开全文
  • VARIANT变量转换

    千次阅读 2013-11-05 22:26:23
     我们怎么把一个整形或double型等其它的类型赋值给VARIANT变量呢,或者是VARIANT变量怎么赋值给int等其它类型呢。 2、 VARIANT是一个结构体,它的结构体如下: struct tagVARIANT {  union {  

    1、 在VC++编程中,我们常常会遇到这样的函数,如:::SetValue(const VARIANTpropVal); 我们怎么把一个整形或double型等其它的类型赋值给VARIANT型变量呢,或者是VARIANT型变量怎么赋值给int等其它类型呢。

    2、 VARIANT是一个结构体,它的结构体如下:

    struct tagVARIANT {

        union {

            struct __tagVARIANT {

                VARTYPE vt;

                WORD    wReserved1;

                WORD    wReserved2;

                WORD    wReserved3;

                union {

                    ULONGLONG     ullVal;       /* VT_UI8               */

                    LONGLONG      llVal;        /* VT_I8                */

                    LONG          lVal;         /* VT_I4                */

                    BYTE          bVal;         /* VT_UI1               */

                    SHORT         iVal;         /* VT_I2                */

                    FLOAT         fltVal;       /* VT_R4                */

                    DOUBLE        dblVal;       /* VT_R8                */

                    VARIANT_BOOL boolVal;      /* VT_BOOL              */

                    _VARIANT_BOOL bool;         /* (obsolete)           */

                    SCODE         scode;        /* VT_ERROR             */

                    CY            cyVal;        /* VT_CY                */

                    DATE          date;         /* VT_DATE              */

                    BSTR          bstrVal;      /* VT_BSTR              */

                    IUnknown *    punkVal;      /* VT_UNKNOWN           */

                    IDispatch *   pdispVal;     /* VT_DISPATCH          */

                    SAFEARRAY *   parray;       /* VT_ARRAY             */

                    BYTE *        pbVal;        /* VT_BYREF|VT_UI1      */

                    SHORT *       piVal;        /* VT_BYREF|VT_I2       */

                    LONG *        plVal;        /* VT_BYREF|VT_I4       */

                    LONGLONG *    pllVal;       /* VT_BYREF|VT_I8       */

                    FLOAT *       pfltVal;      /* VT_BYREF|VT_R4       */

                    DOUBLE *      pdblVal;      /* VT_BYREF|VT_R8       */

                    VARIANT_BOOL *pboolVal;     /* VT_BYREF|VT_BOOL     */

                    _VARIANT_BOOL *pbool;       /* (obsolete)           */

                    SCODE *       pscode;       /* VT_BYREF|VT_ERROR    */

                    CY *          pcyVal;       /* VT_BYREF|VT_CY       */

                    DATE *        pdate;        /* VT_BYREF|VT_DATE     */

                    BSTR *        pbstrVal;     /* VT_BYREF|VT_BSTR     */

                    IUnknown **   ppunkVal;     /* VT_BYREF|VT_UNKNOWN */

                    IDispatch ** ppdispVal;    /* VT_BYREF|VT_DISPATCH */

                    SAFEARRAY ** pparray;      /* VT_BYREF|VT_ARRAY    */

                    VARIANT *     pvarVal;      /* VT_BYREF|VT_VARIANT */

                    PVOID         byref;        /* Generic ByRef        */

                    CHAR          cVal;         /* VT_I1                */

                    USHORT        uiVal;        /* VT_UI2               */

                    ULONG         ulVal;        /* VT_UI4               */

                    INT           intVal;       /* VT_INT               */

                    UINT          uintVal;      /* VT_UINT              */

                    DECIMAL *     pdecVal;      /* VT_BYREF|VT_DECIMAL */

                    CHAR *        pcVal;        /* VT_BYREF|VT_I1       */

                    USHORT *      puiVal;       /* VT_BYREF|VT_UI2      */

                    ULONG *       pulVal;       /* VT_BYREF|VT_UI4      */

                    ULONGLONG *   pullVal;      /* VT_BYREF|VT_UI8      */

                    INT *         pintVal;      /* VT_BYREF|VT_INT      */

                    UINT *        puintVal;     /* VT_BYREF|VT_UINT     */

                    struct __tagBRECORD {

                        PVOID         pvRecord;

                        IRecordInfo * pRecInfo;

                    } __VARIANT_NAME_4;         /* VT_RECORD            */

                } __VARIANT_NAME_3;

            } __VARIANT_NAME_2;

            DECIMAL decVal;

        } __VARIANT_NAME_1;

    };

    3、 Float型转化为VARIANT

    //float型转化为VARIANT

    VARIANT va1;

    float a1=m_Fre1_AD9852;

    va1.vt=VT_R4;///指明float数据,VT_I4是整型,VT_R8double

    //va1.lVal=a1; 

    va1.fltVal=a1; //指明fltVal是float型赋值,intVal是整型,dblVal是double

    m_Fre1_wknob.SetValue(va1);

    4、 VARIANT型转化为double型

    VARIANT var;

    var=m_Power_wknob.GetValue();//获取值

    value_power=var.dblVal; ///指明fltVal是float型赋值,intVal是整型,dblVal是double

    AMP_dBm_Reg=value_power;//赋值给double型

    展开全文
  • 实际上,Variant类型对Pascal语言有普遍而深入的影响,Delphi 控件库中与OLE 无关的地方也使用到这种类型。 Variant变量没有类型 一般说来,你可以用Variant 变量存储任何数据类型,对它执行各种操作和类型转换...
  • variant和OleVariant变量类型的区别

    千次阅读 2014-09-04 11:10:57
    摘自论坛: ...1.一般不建议使用Variant和OleVariant,除非数据类型只有在运行期才能确定或获知的。OleVariant常常用来做基于COM的程序:Auutomation和ActiveX控制,Variant基于non-COM的程序。 2.
  • Autoit中的变量类型

    2014-03-12 11:53:02
    Autoit中的变量类型,对于刚接触Autoit有帮助,
  • VARIANT 数据类型

    千次阅读 2017-08-15 11:48:31
    VARIANT 数据类型在文件OAIDL.IDL中定义如下:  【vc中数据类型,对应类为_variant_t】 struct tagVARIANT {  union {  struct __tagVARIANT {  VARTYPE vt;  WORD wReserved1;  
  • function TForm1.A(str:string):variant; begin Result:=str; end; procedure TForm1.btn1Click(Sender: TObject);...Variant: 一种可以拥有各种数据类型; 也可以告诉目前存储的数据是什么类型(通过使用Var
  • 关于C++ variant 类型问题

    千次阅读 2017-02-20 16:50:12
    一直想知道C++标准库有没有类似Qt下QVariant功能的类。...2. _variant_t 这个在 comutil.h 文件内, 应该主要是windows 下的解决方案.。. 3.boost variant 和 boost any 麻烦的是需要引用boost
  • Variant类型

    2012-02-06 12:58:00
    实际上,Variant类型对Pascal语言有普遍而深入的影响,Delphi 控件库中与OLE 无关的地方也使用到这种类型。Variant变量没有类型 一般说来,你可以用Variant 变量存储任何数据类型,对它执行各种操作和类型转换。...
  • VARTYPE vt —— 表示这个VARIANT内部存储的变量类型。 然后就是对应的数据成员了。比如vt为VT_I8,那么对应的数据在llVal;比如vt为VT_R4,那么数据在fltVal中。 获取成员 使用V_VT宏,可以获取VARIANT数据的...
  • VARIANT-CPP 库是一个简单的库,它提供了一个 Variant::Value 类,可用于存储几乎任何类型变量。 这对于与非强类型技术交互的 C++ 程序很有用。 目前,值对象可以表示整数、字符串、变量向量或变量的字符串索引...
  • C++变体数据类型—— VARIANT

    万次阅读 2018-03-14 16:01:25
    百度百科:Variant 音标 Phonetic symbol [] 词性及解释 Part of speech and defination n.... 变异体, 变型, 变种 Variant 数据类型是所有没被显式声明(用如 Dim、Private、Public 或 Static等语句)为其他类...
  • C++17之std::variant

    万次阅读 2019-09-05 21:55:18
    从C中采用的c++提供了对union的支持,union是能够保存可能类型列表之一的对象。但是,这种语言特性也有一些缺点: 对象不知道它们当前持有的值的类型。 由于这个原因,您不能有non-trivial的成员,比如std::string...
  • VARIANT变量

    千次阅读 2008-07-27 16:54:00
     定义VARIANT变量可以直接定义VARIANT类型变量。 VARIANT val; b. 初始化VARIANT变量在使用VARIANT变量之前,一定要初始化。 VariantInit(&val); c. 设置变量值设置变量值前如果VARIANT变量中已经有值,先...
  • 今天写c++ 遇到一个场景,需要往一个变量里放入不同类型的值 引入头文件: #include <variant> using AttributeValue = std::variant<bool, int32_t, int64_t, uint32_t, double, // const char...
  • QML基础类型variant

    2020-11-30 09:27:30
    变量类型是通用属性类型。它已过时,仅用于支持旧应用程序。新应用程序应改用var类型属性。 变量类型属性可以保存任何基本类型值: Item { property variant aNumber: 100 property variant aString: "Hello ...
  • VARIANT类型的用法

    2019-09-29 18:11:14
     对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型变量赋值,举个例子: VARIANT va; int a=2001; va.vt=VT_I4;///指明整型数据 va.lVal=a; ///赋值 ...
  • 在VC中如何使用VARIANT变量

    千次阅读 2009-01-04 15:32:00
    在VC中如何使用VARIANT变量 VIRIANT是ACTIVEX AUTOMATION需要用到的一种变量类型,可以称之为通用数据类型,其实它是一个结构。如果仅仅是调用ACTIVEX对象所提供的METHOD不需知道其中的细节。它仅用于通过IDISPATCH...
  • dim tmpA (tmpA是一个控件的.Left,类型Variant/single)实际数据为1234.05 dim tmpB as Long 当 tmpB=tmpA 后,tmpB的数据变成1234了,这就是数据类型不匹配造成的。...
  • boost::variant, T2>类型变量的适配

    千次阅读 2016-01-23 00:09:39
    本文我们将介绍boost::variant, T2>类型变量的赋值问题,以及类的类型转换运算符重载函数的调用时机。
  • 关于VC从VARIANT类型取数据的小结

    千次阅读 2009-05-14 17:44:00
    这几天,一直为一个以前没见过的类型头痛不已,网上找解决方法又不贴切,着实让我难受了一阵子.今天终于把问题解决,在这里跟大家分.....在这种情况下,我们可以通过取得VARIANT类型变量的vt值,得以确认: 
  • 错误提示 :"试图将 Null 值赋予一个非 Variant 数据类型变量" 错误原因:在VS2005中,用ACCESS做数据库时insert into 命令会把自动编号也会加进去,所以这个就需要我们自己更改insert command,去掉自动...
  • _variant_t类型转换

    2011-05-16 23:44:11
    将 _variant_t 类型变量,转换成任意类型
  • 在java中使用jdbc执行的时候总是报错,说value是一个变量类型。如下错误 ``` Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不支持“variant”数据类型。 ``` 请问有人遇到过吗,如何解决
  • 如何才能实现VARIANT类型变量转换成Str类型的变量? 例如: ////为VARIANT型不变量cvt赋值; VARIANT cvt; float b; b=10.11; cvt=COleVariant(b); 如何才能将cvt的值转换成Str型变量cstr?
  • 从com的设计初衷来讲,要达到跨语言的目的,但是c++啊,java,python,pascal什么的都是有...从c++的本质来讲,VARIANT类型就是一个结构体,该结构体中有一个成员是表示该变量到底是个什么变量,也就是应该把这个表示
  • 工作经验总结之_VARIANT变量用法

    千次阅读 2008-11-15 14:04:00
    工作经验总结之_VARIANT变量用法 typedef struct tagCY{结构体原型typedef struct tagVARIANT { VARTYPE vt;//enum类型 unsigned short wReserved1//保留字段; unsigned short wReserved2; unsigned short ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,756
精华内容 9,502
关键字:

variant类型变量