VARIANT型


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

関連ヘッダーファイル

  • OAIdl.h
  • OleAuto.h           (OAIdl.hをインクルド)
  • ole2.h                 (OleAuto.hをインクルド)


メンバと弁別子との対応表

メンバ 弁別子 typedef 備考
LONGLONG llVal VT_I8 0x0014 __int64
LONG lVal VT_I4 0x0003 long
BYTE bVal VT_UI1 0x0011 unsigned char
SHORT iVal VT_I2 0x0002 short
FLOAT fltVal VT_R4 0x0004 float
DOUBLE dblVal VT_R8 0x0005 double
VARIAT_BOOL boolVal VT_BOOL 0x000b short 0==FALSE,-1==TRUE
SCODE scode VT_ERROR 0x000a LONG
CY cyVal VT_CY 0x0006 通貨型?
DATE date VT_DATE 0x0007 double
BSTR bstrVal VT_BSTR 0x0008 OLECHAR*
IUnknown * punkVal VT_UNKNOWN 0x000d
IDispatch * pdispVal VT_DISPATCH 0x0009
SAFEARRAY * parray VT_ARRAY 0x2000
BYTE * pbVal VT_BYREF│VT_UI1 0x4011
SHORT * piVal VT_BYREF│VT_I2 0x4002
LONG * plVal VT_BYREF│VT_I4 0x4003
LONGLONG * pllVal VT_BYREF│VT_I8 0x4014
FLOAT * pfltVal VT_BYREF│VT_R4 0x4004
DOUBLE * pdblVal VT_BYREF│VT_R8 0x4005
VARIANT_BOOL * pboolVal VT_BYREF│VT_BOOL 0x400b
SCODE * pscode VT_BYREF│VT_ERROR 0x400a
CY * pcyVal VT_BYREF│VT_CY 0x4006
DATE * pdate VT_BYREF│VT_DATE 0x4007
BSTR * pbstrVal VT_BYREF│VT_BSTR 0x4008
IUnknown ** ppunkVal VT_BYREF│VT_UNKNOWN 0x400d
IDispatch ** ppdispVal VT_BYREF│VT_DISPATCH 0x4009
SAFEARRAY ** pparray VT_BYREF│VT_ARRAY 0x6000
VARIANT * pvarVal VT_BYREF│VT_VARIANT 0x400c
PVOID byref VT_BYREF(Generic ByRef) 0x4000
CHAR cVal VT_I1 0x0010
USHORT uiVal VT_UI2 0x0012
ULONG ulVal VT_UI4 0x0013
ULONGLONG ullVal VT_UI8 0x0015
INT intVal VT_INT 0x0016
UINT uintVal VT_UINT 0x0017
DECIMAL * pdecVal VT_BYREF│VT_DECIMAL 0x400e
CHAR * pcVal VT_BYREF│VT_I1 0x4010
USHORT * puiVal VT_BYREF│VT_UI2 0x4012
ULONG * pulVal VT_BYREF│VT_UI4 0x4013
ULONGLONG * pullVal VT_BYREF│VT_UI8 0x4015
INT * pintVal VT_BYREF│VT_INT 0x4016
UINT * puintVal VT_BYREF│VT_UINT 0x4017



VT列挙型

enum VARENUM
{
   VT_EMPTY            = 0,
   VT_NULL             = 1,
   VT_I2	               = 2,
   VT_I4	               = 3,
   VT_R4	               = 4,
   VT_R8	               = 5,
   VT_CY	               = 6,
   VT_DATE             = 7,
   VT_BSTR             = 8,
   VT_DISPATCH         = 9,
   VT_ERROR            = 10,
   VT_BOOL             = 11,
   VT_VARIANT          = 12,
   VT_UNKNOWN          = 13,
   VT_DECIMAL          = 14,
   VT_I1	               = 16,
   VT_UI1              = 17,
   VT_UI2              = 18,
   VT_UI4              = 19,
   VT_I8	               = 20,
   VT_UI8              = 21,
   VT_INT              = 22,
   VT_UINT             = 23,
   VT_VOID             = 24,
   VT_HRESULT          = 25,
   VT_PTR              = 26,
   VT_SAFEARRAY        = 27,
   VT_CARRAY           = 28,
   VT_USERDEFINED	      = 29,
   VT_LPSTR            = 30,
   VT_LPWSTR           = 31,
   VT_RECORD           = 36,
   VT_INT_PTR          = 37,
   VT_UINT_PTR         = 38,
   VT_FILETIME         = 64,
   VT_BLOB             = 65,
   VT_STREAM           = 66,
   VT_STORAGE          = 67,
   VT_STREAMED_OBJECT  = 68,
   VT_STORED_OBJECT    = 69,
   VT_BLOB_OBJECT      = 70,
   VT_CF	               = 71,
   VT_CLSID            = 72,
   VT_VERSIONED_STREAM = 73,
   VT_BSTR_BLOB        = 0xfff,
   VT_VECTOR           = 0x1000,
   VT_ARRAY            = 0x2000,
   VT_BYREF            = 0x4000,
   VT_RESERVED         = 0x8000,
   VT_ILLEGAL          = 0xffff,
   VT_ILLEGALMASKED    = 0xfff,
   VT_TYPEMASK         = 0xfff
} ;



VARIANT型の解放について

内部で解放が必要な型が使われている場合(SAFEARRAYやBSTRなど)、

VariantClear()

を使って解放を行う。
VariantClear()は使われている型に従って、内部でメモリの解放を
してくれる。
SAFEARRAY配列のなかで解放が必要な型などを使っている場合も、
きちんと追って解放してくれるらしい。



VARIANT型のコピー

VariantCopy(*dst,*src)
を使ってコピーすることが可能だが、VariantInit()を使って
きちんと初期化しないと値が不定になるので注意。
vtメンバがコピーされないっぽい。



型変換

VariantChangeType(*dst,*src,flg,type)
を使うことで型変換をすることが可能。
もちろん*dst=*srcとすることもできる。
一番使うのではないかと思われるのが VT_DATE ⇒ VT_BSTRではないだろうか。
VT_DATEがdouble型な上、一体どういう値なのか良く分からない(調べていない)ので
この関数で型変換してしまったほうがいいだろう。
ちなみにVT_DATEのときの値はtime_tとは異なるのは確か。
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。