summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/site/lib/Win32/OLE/TypeInfo.pm
blob: d95399c1e29c9a71007dcc01744aad45039bc0be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
# This module is still experimental and intentionally undocumented.
# If you don't know why it is here, then you should probably not use it.

package Win32::OLE::TypeInfo;

use strict;
use vars qw(@ISA @EXPORT @EXPORT_OK);
use vars qw(@VT %TYPEFLAGS @TYPEKIND %IMPLTYPEFLAGS %PARAMFLAGS
            %FUNCFLAGS @CALLCONV @FUNCKIND %INVOKEKIND %VARFLAGS
	    %LIBFLAGS @SYSKIND);

use Exporter;
@ISA = qw(Exporter);

@EXPORT = qw(
  VT_EMPTY VT_NULL VT_I2 VT_I4 VT_R4 VT_R8 VT_CY VT_DATE
  VT_BSTR VT_DISPATCH VT_ERROR VT_BOOL VT_VARIANT VT_UNKNOWN
  VT_DECIMAL VT_I1 VT_UI1 VT_UI2 VT_UI4 VT_I8 VT_UI8 VT_INT
  VT_UINT VT_VOID VT_HRESULT VT_PTR VT_SAFEARRAY VT_CARRAY
  VT_USERDEFINED VT_LPSTR VT_LPWSTR VT_FILETIME VT_BLOB
  VT_STREAM VT_STORAGE VT_STREAMED_OBJECT VT_STORED_OBJECT
  VT_BLOB_OBJECT VT_CF VT_CLSID VT_VECTOR VT_ARRAY VT_BYREF
  VT_RESERVED VT_ILLEGAL VT_ILLEGALMASKED VT_TYPEMASK

  TYPEFLAG_FAPPOBJECT TYPEFLAG_FCANCREATE TYPEFLAG_FLICENSED
  TYPEFLAG_FPREDECLID TYPEFLAG_FHIDDEN TYPEFLAG_FCONTROL
  TYPEFLAG_FDUAL TYPEFLAG_FNONEXTENSIBLE TYPEFLAG_FOLEAUTOMATION
  TYPEFLAG_FRESTRICTED TYPEFLAG_FAGGREGATABLE TYPEFLAG_FREPLACEABLE
  TYPEFLAG_FDISPATCHABLE TYPEFLAG_FREVERSEBIND

  TKIND_ENUM TKIND_RECORD TKIND_MODULE TKIND_INTERFACE TKIND_DISPATCH
  TKIND_COCLASS TKIND_ALIAS TKIND_UNION TKIND_MAX

  IMPLTYPEFLAG_FDEFAULT IMPLTYPEFLAG_FSOURCE IMPLTYPEFLAG_FRESTRICTED
  IMPLTYPEFLAG_FDEFAULTVTABLE

  PARAMFLAG_NONE PARAMFLAG_FIN PARAMFLAG_FOUT PARAMFLAG_FLCID
  PARAMFLAG_FRETVAL PARAMFLAG_FOPT PARAMFLAG_FHASDEFAULT

  FUNCFLAG_FRESTRICTED FUNCFLAG_FSOURCE FUNCFLAG_FBINDABLE
  FUNCFLAG_FREQUESTEDIT FUNCFLAG_FDISPLAYBIND FUNCFLAG_FDEFAULTBIND
  FUNCFLAG_FHIDDEN FUNCFLAG_FUSESGETLASTERROR FUNCFLAG_FDEFAULTCOLLELEM
  FUNCFLAG_FUIDEFAULT FUNCFLAG_FNONBROWSABLE FUNCFLAG_FREPLACEABLE
  FUNCFLAG_FIMMEDIATEBIND

  CC_FASTCALL CC_CDECL CC_MSCPASCAL CC_PASCAL CC_MACPASCAL CC_STDCALL
  CC_FPFASTCALL CC_SYSCALL CC_MPWCDECL CC_MPWPASCAL CC_MAX

  INVOKE_FUNC INVOKE_PROPERTYGET INVOKE_PROPERTYPUT INVOKE_PROPERTYPUTREF

  VARFLAG_FREADONLY VARFLAG_FSOURCE VARFLAG_FBINDABLE VARFLAG_FREQUESTEDIT
  VARFLAG_FDISPLAYBIND VARFLAG_FDEFAULTBIND VARFLAG_FHIDDEN VARFLAG_FRESTRICTED
  VARFLAG_FDEFAULTCOLLELEM VARFLAG_FUIDEFAULT VARFLAG_FNONBROWSABLE
  VARFLAG_FREPLACEABLE VARFLAG_FIMMEDIATEBIND

  LIBFLAG_FRESTRICTED LIBFLAG_FCONTROL LIBFLAG_FHIDDEN
  SYS_WIN16 SYS_WIN32 SYS_MAC

  FUNC_VIRTUAL FUNC_PUREVIRTUAL FUNC_NONVIRTUAL FUNC_STATIC FUNC_DISPATCH

  @VT %TYPEFLAGS @TYPEKIND %IMPLTYPEFLAGS %PARAMFLAGS
  %FUNCFLAGS @CALLCONV @FUNCKIND %INVOKEKIND %VARFLAGS %LIBFLAGS @SYSKIND
);

# Lib Flags
# ---------

sub LIBFLAG_FRESTRICTED () { 0x01; }
sub LIBFLAG_FCONTROL    () { 0x02; }
sub LIBFLAG_FHIDDEN     () { 0x04; }

$LIBFLAGS{LIBFLAG_FRESTRICTED()} = LIBFLAG_FRESTRICTED;
$LIBFLAGS{LIBFLAG_FCONTROL()}    = LIBFLAG_FCONTROL;
$LIBFLAGS{LIBFLAG_FHIDDEN()}     = LIBFLAG_FHIDDEN;

# Sys Kind
# --------

sub SYS_WIN16 () { 0; }
sub SYS_WIN32 () { SYS_WIN16() + 1; }
sub SYS_MAC   () { SYS_WIN32() + 1; }

$SYSKIND[SYS_WIN16] = 'SYS_WIN16';
$SYSKIND[SYS_WIN32] = 'SYS_WIN32';
$SYSKIND[SYS_MAC]   = 'SYS_MAC';

# Type Flags
# ----------

sub TYPEFLAG_FAPPOBJECT     () { 0x1; }
sub TYPEFLAG_FCANCREATE     () { 0x2; }
sub TYPEFLAG_FLICENSED      () { 0x4; }
sub TYPEFLAG_FPREDECLID     () { 0x8; }
sub TYPEFLAG_FHIDDEN        () { 0x10; }
sub TYPEFLAG_FCONTROL       () { 0x20; }
sub TYPEFLAG_FDUAL          () { 0x40; }
sub TYPEFLAG_FNONEXTENSIBLE () { 0x80; }
sub TYPEFLAG_FOLEAUTOMATION () { 0x100; }
sub TYPEFLAG_FRESTRICTED    () { 0x200; }
sub TYPEFLAG_FAGGREGATABLE  () { 0x400; }
sub TYPEFLAG_FREPLACEABLE   () { 0x800; }
sub TYPEFLAG_FDISPATCHABLE  () { 0x1000; }
sub TYPEFLAG_FREVERSEBIND   () { 0x2000; }

$TYPEFLAGS{TYPEFLAG_FAPPOBJECT()}     = TYPEFLAG_FAPPOBJECT;
$TYPEFLAGS{TYPEFLAG_FCANCREATE()}     = TYPEFLAG_FCANCREATE;
$TYPEFLAGS{TYPEFLAG_FLICENSED()}      = TYPEFLAG_FLICENSED;
$TYPEFLAGS{TYPEFLAG_FPREDECLID()}     = TYPEFLAG_FPREDECLID;
$TYPEFLAGS{TYPEFLAG_FHIDDEN()}        = TYPEFLAG_FHIDDEN;
$TYPEFLAGS{TYPEFLAG_FCONTROL()}       = TYPEFLAG_FCONTROL;
$TYPEFLAGS{TYPEFLAG_FDUAL()}          = TYPEFLAG_FDUAL;
$TYPEFLAGS{TYPEFLAG_FNONEXTENSIBLE()} = TYPEFLAG_FNONEXTENSIBLE;
$TYPEFLAGS{TYPEFLAG_FOLEAUTOMATION()} = TYPEFLAG_FOLEAUTOMATION;
$TYPEFLAGS{TYPEFLAG_FRESTRICTED()}    = TYPEFLAG_FRESTRICTED;
$TYPEFLAGS{TYPEFLAG_FAGGREGATABLE()}  = TYPEFLAG_FAGGREGATABLE;
$TYPEFLAGS{TYPEFLAG_FREPLACEABLE()}   = TYPEFLAG_FREPLACEABLE;
$TYPEFLAGS{TYPEFLAG_FDISPATCHABLE()}  = TYPEFLAG_FDISPATCHABLE;
$TYPEFLAGS{TYPEFLAG_FREVERSEBIND()}   = TYPEFLAG_FREVERSEBIND;

# Type Kind
# ---------

sub TKIND_ENUM      () { 0; }
sub TKIND_RECORD    () { TKIND_ENUM()      + 1; }
sub TKIND_MODULE    () { TKIND_RECORD()    + 1; }
sub TKIND_INTERFACE () { TKIND_MODULE()    + 1; }
sub TKIND_DISPATCH  () { TKIND_INTERFACE() + 1; }
sub TKIND_COCLASS   () { TKIND_DISPATCH()  + 1; }
sub TKIND_ALIAS     () { TKIND_COCLASS()   + 1; }
sub TKIND_UNION     () { TKIND_ALIAS()     + 1; }
sub TKIND_MAX       () { TKIND_UNION()     + 1; }

$TYPEKIND[TKIND_ENUM]      = 'TKIND_ENUM';
$TYPEKIND[TKIND_RECORD]    = 'TKIND_RECORD';
$TYPEKIND[TKIND_MODULE]    = 'TKIND_MODULE';
$TYPEKIND[TKIND_INTERFACE] = 'TKIND_INTERFACE';
$TYPEKIND[TKIND_DISPATCH]  = 'TKIND_DISPATCH';
$TYPEKIND[TKIND_COCLASS]   = 'TKIND_COCLASS';
$TYPEKIND[TKIND_ALIAS]     = 'TKIND_ALIAS';
$TYPEKIND[TKIND_UNION]     = 'TKIND_UNION';

# Implemented Type Flags
# ----------------------

sub IMPLTYPEFLAG_FDEFAULT	() { 0x1; }
sub IMPLTYPEFLAG_FSOURCE	() { 0x2; }
sub IMPLTYPEFLAG_FRESTRICTED	() { 0x4; }
sub IMPLTYPEFLAG_FDEFAULTVTABLE	() { 0x800; }
 
$IMPLTYPEFLAGS{IMPLTYPEFLAG_FDEFAULT()}       = IMPLTYPEFLAG_FDEFAULT;
$IMPLTYPEFLAGS{IMPLTYPEFLAG_FSOURCE()}        = IMPLTYPEFLAG_FSOURCE;
$IMPLTYPEFLAGS{IMPLTYPEFLAG_FRESTRICTED()}    = IMPLTYPEFLAG_FRESTRICTED;
$IMPLTYPEFLAGS{IMPLTYPEFLAG_FDEFAULTVTABLE()} = IMPLTYPEFLAG_FDEFAULTVTABLE;

# Parameter Flags
# ---------------

sub PARAMFLAG_NONE        () { 0; }
sub PARAMFLAG_FIN         () { 0x1; }
sub PARAMFLAG_FOUT        () { 0x2; }
sub PARAMFLAG_FLCID       () { 0x4; }
sub PARAMFLAG_FRETVAL     () { 0x8; }
sub PARAMFLAG_FOPT        () { 0x10; }
sub PARAMFLAG_FHASDEFAULT () { 0x20; }

$PARAMFLAGS{PARAMFLAG_NONE()}        = PARAMFLAG_NONE;
$PARAMFLAGS{PARAMFLAG_FIN()}         = PARAMFLAG_FIN;
$PARAMFLAGS{PARAMFLAG_FOUT()}        = PARAMFLAG_FOUT;
$PARAMFLAGS{PARAMFLAG_FLCID()}       = PARAMFLAG_FLCID;
$PARAMFLAGS{PARAMFLAG_FRETVAL()}     = PARAMFLAG_FRETVAL;
$PARAMFLAGS{PARAMFLAG_FOPT()}        = PARAMFLAG_FOPT;
$PARAMFLAGS{PARAMFLAG_FHASDEFAULT()} = PARAMFLAG_FHASDEFAULT;

# Function Flags
# --------------

sub FUNCFLAG_FRESTRICTED       () { 0x1; }
sub FUNCFLAG_FSOURCE           () { 0x2; }
sub FUNCFLAG_FBINDABLE         () { 0x4; }
sub FUNCFLAG_FREQUESTEDIT      () { 0x8; }
sub FUNCFLAG_FDISPLAYBIND      () { 0x10; }
sub FUNCFLAG_FDEFAULTBIND      () { 0x20; }
sub FUNCFLAG_FHIDDEN           () { 0x40; }
sub FUNCFLAG_FUSESGETLASTERROR () { 0x80; }
sub FUNCFLAG_FDEFAULTCOLLELEM  () { 0x100; }
sub FUNCFLAG_FUIDEFAULT        () { 0x200; }
sub FUNCFLAG_FNONBROWSABLE     () { 0x400; }
sub FUNCFLAG_FREPLACEABLE      () { 0x800; }
sub FUNCFLAG_FIMMEDIATEBIND    () { 0x1000; }

$FUNCFLAGS{FUNCFLAG_FRESTRICTED()}       = FUNCFLAG_FRESTRICTED;
$FUNCFLAGS{FUNCFLAG_FSOURCE()}           = FUNCFLAG_FSOURCE;
$FUNCFLAGS{FUNCFLAG_FBINDABLE()}         = FUNCFLAG_FBINDABLE;
$FUNCFLAGS{FUNCFLAG_FREQUESTEDIT()}      = FUNCFLAG_FREQUESTEDIT;
$FUNCFLAGS{FUNCFLAG_FDISPLAYBIND()}      = FUNCFLAG_FDISPLAYBIND;
$FUNCFLAGS{FUNCFLAG_FDEFAULTBIND()}      = FUNCFLAG_FDEFAULTBIND;
$FUNCFLAGS{FUNCFLAG_FHIDDEN()}           = FUNCFLAG_FHIDDEN;
$FUNCFLAGS{FUNCFLAG_FUSESGETLASTERROR()} = FUNCFLAG_FUSESGETLASTERROR;
$FUNCFLAGS{FUNCFLAG_FDEFAULTCOLLELEM()}  = FUNCFLAG_FDEFAULTCOLLELEM;
$FUNCFLAGS{FUNCFLAG_FUIDEFAULT()}        = FUNCFLAG_FUIDEFAULT;
$FUNCFLAGS{FUNCFLAG_FNONBROWSABLE()}     = FUNCFLAG_FNONBROWSABLE;
$FUNCFLAGS{FUNCFLAG_FREPLACEABLE()}      = FUNCFLAG_FREPLACEABLE;
$FUNCFLAGS{FUNCFLAG_FIMMEDIATEBIND()}    = FUNCFLAG_FIMMEDIATEBIND;

# Calling conventions
# -------------------

sub CC_FASTCALL   () { 0; }
sub CC_CDECL      () { 1; }
sub CC_MSCPASCAL  () { CC_CDECL()      + 1; }
sub CC_PASCAL     () { CC_MSCPASCAL; }
sub CC_MACPASCAL  () { CC_PASCAL()     + 1; }
sub CC_STDCALL    () { CC_MACPASCAL()  + 1; }
sub CC_FPFASTCALL () { CC_STDCALL()    + 1; }
sub CC_SYSCALL    () { CC_FPFASTCALL() + 1; }
sub CC_MPWCDECL   () { CC_SYSCALL()    + 1; }
sub CC_MPWPASCAL  () { CC_MPWCDECL()   + 1; }
sub CC_MAX        () { CC_MPWPASCAL()  + 1; }

$CALLCONV[CC_FASTCALL]   = 'CC_FASTCALL';
$CALLCONV[CC_CDECL]      = 'CC_CDECL';
$CALLCONV[CC_PASCAL]     = 'CC_PASCAL';
$CALLCONV[CC_MACPASCAL]  = 'CC_MACPASCAL';
$CALLCONV[CC_STDCALL]    = 'CC_STDCALL';
$CALLCONV[CC_FPFASTCALL] = 'CC_FPFASTCALL';
$CALLCONV[CC_SYSCALL]    = 'CC_SYSCALL';
$CALLCONV[CC_MPWCDECL]   = 'CC_MPWCDECL';
$CALLCONV[CC_MPWPASCAL]  = 'CC_MPWPASCAL';

# Function Kind
# -------------

sub FUNC_VIRTUAL     () { 0; }
sub FUNC_PUREVIRTUAL () { FUNC_VIRTUAL()     + 1; }
sub FUNC_NONVIRTUAL  () { FUNC_PUREVIRTUAL() + 1; }
sub FUNC_STATIC      () { FUNC_NONVIRTUAL()  + 1; }
sub FUNC_DISPATCH    () { FUNC_STATIC()      + 1; }

$FUNCKIND[FUNC_VIRTUAL]     = 'FUNC_VIRTUAL';
$FUNCKIND[FUNC_PUREVIRTUAL] = 'FUNC_PUREVIRTUAL';
$FUNCKIND[FUNC_NONVIRTUAL]  = 'FUNC_NONVIRTUAL';
$FUNCKIND[FUNC_STATIC]      = 'FUNC_STATIC';
$FUNCKIND[FUNC_DISPATCH]    = 'FUNC_DISPATCH';

# Invoke Kind
# -----------

sub INVOKE_FUNC           () { 1; }
sub INVOKE_PROPERTYGET    () { 2; }
sub INVOKE_PROPERTYPUT    () { 4; }
sub INVOKE_PROPERTYPUTREF () { 8; }

$INVOKEKIND{INVOKE_FUNC()}           = INVOKE_FUNC;
$INVOKEKIND{INVOKE_PROPERTYGET()}    = INVOKE_PROPERTYGET;
$INVOKEKIND{INVOKE_PROPERTYPUT()}    = INVOKE_PROPERTYPUT;
$INVOKEKIND{INVOKE_PROPERTYPUTREF()} = INVOKE_PROPERTYPUTREF;

# Variable Flags
# --------------

sub VARFLAG_FREADONLY        () { 0x1;    }
sub VARFLAG_FSOURCE          () { 0x2;    }
sub VARFLAG_FBINDABLE        () { 0x4;    }
sub VARFLAG_FREQUESTEDIT     () { 0x8;    }
sub VARFLAG_FDISPLAYBIND     () { 0x10;   }
sub VARFLAG_FDEFAULTBIND     () { 0x20;   }
sub VARFLAG_FHIDDEN          () { 0x40;   }
sub VARFLAG_FRESTRICTED      () { 0x80;   }
sub VARFLAG_FDEFAULTCOLLELEM () { 0x100;  }
sub VARFLAG_FUIDEFAULT       () { 0x200;  }
sub VARFLAG_FNONBROWSABLE    () { 0x400;  }
sub VARFLAG_FREPLACEABLE     () { 0x800;  }
sub VARFLAG_FIMMEDIATEBIND   () { 0x1000; }

$VARFLAGS{VARFLAG_FREADONLY()}        = VARFLAG_FREADONLY;
$VARFLAGS{VARFLAG_FSOURCE()}          = VARFLAG_FSOURCE;
$VARFLAGS{VARFLAG_FBINDABLE()}        = VARFLAG_FBINDABLE;
$VARFLAGS{VARFLAG_FREQUESTEDIT()}     = VARFLAG_FREQUESTEDIT;
$VARFLAGS{VARFLAG_FDISPLAYBIND()}     = VARFLAG_FDISPLAYBIND;
$VARFLAGS{VARFLAG_FDEFAULTBIND()}     = VARFLAG_FDEFAULTBIND;
$VARFLAGS{VARFLAG_FHIDDEN()}          = VARFLAG_FHIDDEN;
$VARFLAGS{VARFLAG_FRESTRICTED()}      = VARFLAG_FRESTRICTED;
$VARFLAGS{VARFLAG_FDEFAULTCOLLELEM()} = VARFLAG_FDEFAULTCOLLELEM;
$VARFLAGS{VARFLAG_FUIDEFAULT()}       = VARFLAG_FUIDEFAULT;
$VARFLAGS{VARFLAG_FNONBROWSABLE()}    = VARFLAG_FNONBROWSABLE;
$VARFLAGS{VARFLAG_FREPLACEABLE()}     = VARFLAG_FREPLACEABLE;
$VARFLAGS{VARFLAG_FIMMEDIATEBIND()}   = VARFLAG_FIMMEDIATEBIND;


# Variant Types
# -------------

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

$VT[VT_EMPTY]           = 'VT_EMPTY';
$VT[VT_NULL]            = 'VT_NULL';
$VT[VT_I2]              = 'VT_I2';
$VT[VT_I4]              = 'VT_I4';
$VT[VT_R4]              = 'VT_R4';
$VT[VT_R8]              = 'VT_R8';
$VT[VT_CY]              = 'VT_CY';
$VT[VT_DATE]            = 'VT_DATE';
$VT[VT_BSTR]            = 'VT_BSTR';
$VT[VT_DISPATCH]        = 'VT_DISPATCH';
$VT[VT_ERROR]           = 'VT_ERROR';
$VT[VT_BOOL]            = 'VT_BOOL';
$VT[VT_VARIANT]         = 'VT_VARIANT';
$VT[VT_UNKNOWN]         = 'VT_UNKNOWN';
$VT[VT_DECIMAL]         = 'VT_DECIMAL';
$VT[VT_I1]              = 'VT_I1';
$VT[VT_UI1]             = 'VT_UI1';
$VT[VT_UI2]             = 'VT_UI2';
$VT[VT_UI4]             = 'VT_UI4';
$VT[VT_I8]              = 'VT_I8';
$VT[VT_UI8]             = 'VT_UI8';
$VT[VT_INT]             = 'VT_INT';
$VT[VT_UINT]            = 'VT_UINT';
$VT[VT_VOID]            = 'VT_VOID';
$VT[VT_HRESULT]         = 'VT_HRESULT';
$VT[VT_PTR]             = 'VT_PTR';
$VT[VT_SAFEARRAY]       = 'VT_SAFEARRAY';
$VT[VT_CARRAY]          = 'VT_CARRAY';
$VT[VT_USERDEFINED]     = 'VT_USERDEFINED';
$VT[VT_LPSTR]           = 'VT_LPSTR';
$VT[VT_LPWSTR]          = 'VT_LPWSTR';
$VT[VT_FILETIME]        = 'VT_FILETIME';
$VT[VT_BLOB]            = 'VT_BLOB';
$VT[VT_STREAM]          = 'VT_STREAM';
$VT[VT_STORAGE]         = 'VT_STORAGE';
$VT[VT_STREAMED_OBJECT] = 'VT_STREAMED_OBJECT';
$VT[VT_STORED_OBJECT]   = 'VT_STORED_OBJECT';
$VT[VT_BLOB_OBJECT]     = 'VT_BLOB_OBJECT';
$VT[VT_CF]              = 'VT_CF';
$VT[VT_CLSID]           = 'VT_CLSID';
$VT[VT_VECTOR]          = 'VT_VECTOR';
$VT[VT_ARRAY]           = 'VT_ARRAY';
$VT[VT_BYREF]           = 'VT_BYREF';
$VT[VT_RESERVED]        = 'VT_RESERVED';
$VT[VT_ILLEGAL]         = 'VT_ILLEGAL';
$VT[VT_ILLEGALMASKED]   = 'VT_ILLEGALMASKED';
$VT[VT_TYPEMASK]        = 'VT_TYPEMASK';

1;