_variant_t val;
val.vt = VT_I8;
val.llVal = 90;如上, 我在程序中这样使用, 编译通过, 运行出错, 在_variant_t析构的时候出错, 请问是什么原因, 怎么解决?
VT_I8它应该支持啊..
多谢

解决方案 »

  1.   

    _variant_t val;
    val.vt = VT_I8;///只有VT_R8
    val.llVal = 90;
    VARENUM
    An enumeration type used in VARIANT, TYPEDESC, and safearrays. The following listing identifies the enumeration that applies to each.// VARENUM usage key,
    // 
    // [V] - May appear in a VARIANT.
    // [T] - May appear in a TYPEDESC.
    // [P] - may appear in an OLE property set.
    // [S] - May appear in a Safe Array.
    // 
    // 
    VT_EMPTY            [V]   [P]         // Not specified.
    VT_NULL               [V]                // SQL-style Null.
    VT_I2               [V][T][P][S]      // 2-byte signed int.
    VT_I4               [V][T][P][S]      // 4-byte-signed int.
    VT_R4               [V][T][P][S]      // 4-byte real. 
    VT_R8               [V][T][P][S]      // 8-byte real.
    VT_CY               [V][T][P][S]      // Currency.
    VT_DATE               [V][T][P][S]      // Date.
    VT_BSTR               [V][T][P][S]      // Automation string.
    VT_DISPATCH         [V][T]   [S]      // IDispatch.Far*
    VT_ERROR            [V][T]   [S]      // Scodes.
    VT_BOOL               [V][T][P][S]      // Boolean; True=-1, False=0.
    VT_VARIANT            [V][T][P][S]      // VARIANT FAR*.
    VT_DECIMAL            [V][T]   [S]      // 16 byte fixed point.
    VT_RECORD            [V]   [P][S]      // User defined type
    VT_UNKNOWN            [V][T]   [S]      // IUnknown FAR*.
    VT_I1               [V][T]   [S]      // Char.
    VT_UI1               [V][T]   [S]      // Unsigned char.
    VT_UI2               [V][T]   [S]      // 2 byte unsigned int.
    VT_UI4               [V][T]   [S]      // 4 byte unsigned int. 
    VT_INT               [V][T]   [S]      // Signed machine int.
    VT_UINT             [V][T]   [S]      // Unsigned machine int.
    VT_VOID                  [T]            // C-style void.
    VT_HRESULT               [T]                                    
    VT_PTR                  [T]            // Pointer type.
    VT_SAFEARRAY            [T]            // Use VT_ARRAY in VARIANT.
    VT_CARRAY               [T]            // C-style array.
    VT_USERDEFINED         [T]            // User-defined type.
    VT_LPSTR               [T][P]         // Null-terminated string.
    VT_LPWSTR               [T][P]         // Wide null-terminated string.
    VT_FILETIME               [P]         //FILETIME
    VT_BLOB                     [P]         //Length prefixed bytes
    VT_STREAM                  [P]         //Name of the stream follows
    VT_STORAGE                  [P]         //Name of the storage follows
    VT_STREAMED_OBJECT         [P]         //Stream contains an object
    VT_STORED_OBJECT         [P]         //Storage contains an object
    VT_BLOB_OBJECT            [P]         //Blob contains an object
    VT_CF                     [P]         //Clipboard format
    VT_CLSID                  [P]         //A Class ID
    VT_VECTOR                  [P]         //simple counted array
    VT_ARRAY            [V]               // SAFEARRAY*.
    VT_BYREF            [V]
    VT_RESERVED
      

  2.   

    但是我查_variant_t的定义有:
    _variant_t(
       __int64 i8Src
    ) throw();
    应该支持啊..
    而且_variant_t应该是VARIANT的封装吧, 我查VARIANT的类型定义里面也有这个啊:
    ULONGLONG               ullVal;            // VT_UI8.
    还是不明白..
      

  3.   

    加上#include <OAIDL.H>,这个是Automation,不是mfc的
      

  4.   

    楼上的方法也不管用暂时的解决方法是:
    VARIANT val;
    val.vt = VI_I8;
    _variant_t VAL;
    VAL.attach( val );