関連ヘッダーファイル
- 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とは異なるのは確か。
最終更新:2009年02月06日 17:08