zoukankan      html  css  js  c++  java
  • 深层次的理解_variant_t

    VARIANT 、_variant_t 与 COleVariant

    VARIANT的结构可以参考头文件VC98IncludeOAIDL.H中关于结构体tagVARIANT的定义。
    对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
    VARIANT va;
    int a=2001;
    va.vt=VT_I4;       //指明整型数据
    va.lVal=a;         //赋值

    对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:

    unsigned char bVal; VT_UI1 
    short iVal; VT_I2 
    long lVal;     VT_I4  
    float fltVal;     VT_R4 
    double dblVal;     VT_R8  
    VARIANT_BOOL boolVal;     VT_BOOL 
    SCODE scode;     VT_ERROR 
    CY cyVal;     VT_CY 
    DATE date;     VT_DATE 
    BSTR bstrVal;     VT_BSTR 
    IUnknown FAR* punkVal;     VT_UNKNOWN 
    IDispatch FAR* pdispVal;     VT_DISPATCH 
    SAFEARRAY FAR* parray;     VT_ARRAY|* 
    unsigned char FAR* pbVal;     VT_BYREF|VT_UI1 
    short FAR* piVal;     VT_BYREF|VT_I2 
    long FAR* plVal;     VT_BYREF|VT_I4 
    float FAR* pfltVal;     VT_BYREF|VT_R4 
    double FAR* pdblVal; VT_BYREF|VT_R8 
    VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL 
    SCODE FAR* pscode;     VT_BYREF|VT_ERROR 
    CY FAR* pcyVal;     VT_BYREF|VT_CY 
    DATE FAR* pdate; VT_BYREF|VT_DATE 
    BSTR FAR* pbstrVal;     VT_BYREF|VT_BSTR 
    IUnknown FAR* FAR* ppunkVal;     VT_BYREF|VT_UNKNOWN 
    IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH 
    SAFEARRAY FAR* FAR* pparray;     VT_ARRAY|* 
    VARIANT FAR* pvarVal;     VT_BYREF|VT_VARIANT 
    void FAR* byref;     VT_BYREF 

    _variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
    例如:
    long l=222;
    ing i=100;
    _variant_t lVal(l);
    lVal = (long)i;

    COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:
    COleVariant v3 = "字符串", v4 = (long)1999;
    CString str =(BSTR)v3.pbstrVal;
    long i = v4.lVal;

  • 相关阅读:
    Educational Codeforces Round 86 (Rated for Div. 2) D. Multiple Testcases
    Educational Codeforces Round 86 (Rated for Div. 2) C. Yet Another Counting Problem
    HDU
    HDU
    HDU
    HDU
    Good Bye 2019 C. Make Good (异或的使用)
    Educational Codeforces Round 78 (Rated for Div. 2) C. Berry Jam
    codeforces 909C. Python Indentation
    codeforces1054 C. Candies Distribution
  • 原文地址:https://www.cnblogs.com/htys/p/3328578.html
Copyright © 2011-2022 走看看