VARIANT型

「VARIANT型」の編集履歴(バックアップ)一覧はこちら

VARIANT型」(2009/02/06 (金) 17:08:22) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

***関連ヘッダーファイル -OAIdl.h -OleAuto.h &space(10) (OAIdl.hをインクルド) -ole2.h &space(16) (OleAuto.hをインクルド) ---- ***メンバと弁別子との対応表 |CENTER:BGCOLOR(yellow):型|CENTER:BGCOLOR(yellow):メンバ|CENTER:BGCOLOR(yellow):弁別子|CENTER:BGCOLOR(yellow):値|CENTER:BGCOLOR(yellow):備考| |LONGLONG |llVal |VT_I8 |0x0014|| |LONG |lVal |VT_I4 |0x0003|| |BYTE |bVal |VT_UI1 |0x0011|| |SHORT |iVal |VT_I2 |0x0002|| |FLOAT |fltVal |VT_R4 |0x0004|| |DOUBLE |dblVal |VT_R8 |0x0005|| |VARIAT_BOOL |boolVal |VT_BOOL |0x000b|| |SCODE |scode |VT_ERROR |0x000a|| |CY |cyVal |VT_CY |0x0006|| |DATE |date |VT_DATE |0x0007|| |BSTR |bstrVal |VT_BSTR |0x0008|| |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) を使ってコピーすることが可能だが、&b(){VariantInit()}を使って きちんと初期化しないと値が不定になるので注意。 &color(red){vtメンバがコピーされないっぽい。} ---- ***型変換 >VariantChangeType(*dst,*src,flg,type) を使うことで型変換をすることが可能。 もちろん&b(){*dst=*src}とすることもできる。 一番使うのではないかと思われるのが &b(){VT_DATE ⇒ VT_BSTR}ではないだろうか。 VT_DATEがdouble型な上、一体どういう値なのか良く分からない(調べていない)ので この関数で型変換してしまったほうがいいだろう。 ちなみにVT_DATEのときの値はtime_tとは異なるのは確か。
***関連ヘッダーファイル -OAIdl.h -OleAuto.h &space(10) (OAIdl.hをインクルド) -ole2.h &space(16) (OleAuto.hをインクルド) ---- ***メンバと弁別子との対応表 |CENTER:BGCOLOR(yellow):型|CENTER:BGCOLOR(yellow):メンバ|CENTER:BGCOLOR(yellow):弁別子|CENTER:BGCOLOR(yellow):値|CENTER:BGCOLOR(yellow):typedef|CENTER:BGCOLOR(yellow):備考| |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) を使ってコピーすることが可能だが、&b(){VariantInit()}を使って きちんと初期化しないと値が不定になるので注意。 &color(red){vtメンバがコピーされないっぽい。} ---- ***型変換 >VariantChangeType(*dst,*src,flg,type) を使うことで型変換をすることが可能。 もちろん&b(){*dst=*src}とすることもできる。 一番使うのではないかと思われるのが &b(){VT_DATE ⇒ VT_BSTR}ではないだろうか。 VT_DATEがdouble型な上、一体どういう値なのか良く分からない(調べていない)ので この関数で型変換してしまったほうがいいだろう。 ちなみにVT_DATEのときの値はtime_tとは異なるのは確か。

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

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