home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _642dbf1ed2b6a1fbc5e9befde614025a < prev    next >
Text File  |  2000-03-15  |  15KB  |  390 lines

  1. # This module is still experimental and intentionally undocumented.
  2. # If you don't know why it is here, then you should probably not use it.
  3.  
  4. package Win32::OLE::TypeInfo;
  5.  
  6. use strict;
  7. use vars qw(@ISA @EXPORT @EXPORT_OK);
  8. use vars qw(@VT %TYPEFLAGS @TYPEKIND %IMPLTYPEFLAGS %PARAMFLAGS
  9.             %FUNCFLAGS @CALLCONV @FUNCKIND %INVOKEKIND %VARFLAGS
  10.         %LIBFLAGS @SYSKIND);
  11.  
  12. use Exporter;
  13. @ISA = qw(Exporter);
  14.  
  15. @EXPORT = qw(
  16.   VT_EMPTY VT_NULL VT_I2 VT_I4 VT_R4 VT_R8 VT_CY VT_DATE
  17.   VT_BSTR VT_DISPATCH VT_ERROR VT_BOOL VT_VARIANT VT_UNKNOWN
  18.   VT_DECIMAL VT_I1 VT_UI1 VT_UI2 VT_UI4 VT_I8 VT_UI8 VT_INT
  19.   VT_UINT VT_VOID VT_HRESULT VT_PTR VT_SAFEARRAY VT_CARRAY
  20.   VT_USERDEFINED VT_LPSTR VT_LPWSTR VT_FILETIME VT_BLOB
  21.   VT_STREAM VT_STORAGE VT_STREAMED_OBJECT VT_STORED_OBJECT
  22.   VT_BLOB_OBJECT VT_CF VT_CLSID VT_VECTOR VT_ARRAY VT_BYREF
  23.   VT_RESERVED VT_ILLEGAL VT_ILLEGALMASKED VT_TYPEMASK
  24.  
  25.   TYPEFLAG_FAPPOBJECT TYPEFLAG_FCANCREATE TYPEFLAG_FLICENSED
  26.   TYPEFLAG_FPREDECLID TYPEFLAG_FHIDDEN TYPEFLAG_FCONTROL
  27.   TYPEFLAG_FDUAL TYPEFLAG_FNONEXTENSIBLE TYPEFLAG_FOLEAUTOMATION
  28.   TYPEFLAG_FRESTRICTED TYPEFLAG_FAGGREGATABLE TYPEFLAG_FREPLACEABLE
  29.   TYPEFLAG_FDISPATCHABLE TYPEFLAG_FREVERSEBIND
  30.  
  31.   TKIND_ENUM TKIND_RECORD TKIND_MODULE TKIND_INTERFACE TKIND_DISPATCH
  32.   TKIND_COCLASS TKIND_ALIAS TKIND_UNION TKIND_MAX
  33.  
  34.   IMPLTYPEFLAG_FDEFAULT IMPLTYPEFLAG_FSOURCE IMPLTYPEFLAG_FRESTRICTED
  35.   IMPLTYPEFLAG_FDEFAULTVTABLE
  36.  
  37.   PARAMFLAG_NONE PARAMFLAG_FIN PARAMFLAG_FOUT PARAMFLAG_FLCID
  38.   PARAMFLAG_FRETVAL PARAMFLAG_FOPT PARAMFLAG_FHASDEFAULT
  39.  
  40.   FUNCFLAG_FRESTRICTED FUNCFLAG_FSOURCE FUNCFLAG_FBINDABLE
  41.   FUNCFLAG_FREQUESTEDIT FUNCFLAG_FDISPLAYBIND FUNCFLAG_FDEFAULTBIND
  42.   FUNCFLAG_FHIDDEN FUNCFLAG_FUSESGETLASTERROR FUNCFLAG_FDEFAULTCOLLELEM
  43.   FUNCFLAG_FUIDEFAULT FUNCFLAG_FNONBROWSABLE FUNCFLAG_FREPLACEABLE
  44.   FUNCFLAG_FIMMEDIATEBIND
  45.  
  46.   CC_FASTCALL CC_CDECL CC_MSCPASCAL CC_PASCAL CC_MACPASCAL CC_STDCALL
  47.   CC_FPFASTCALL CC_SYSCALL CC_MPWCDECL CC_MPWPASCAL CC_MAX
  48.  
  49.   INVOKE_FUNC INVOKE_PROPERTYGET INVOKE_PROPERTYPUT INVOKE_PROPERTYPUTREF
  50.  
  51.   VARFLAG_FREADONLY VARFLAG_FSOURCE VARFLAG_FBINDABLE VARFLAG_FREQUESTEDIT
  52.   VARFLAG_FDISPLAYBIND VARFLAG_FDEFAULTBIND VARFLAG_FHIDDEN VARFLAG_FRESTRICTED
  53.   VARFLAG_FDEFAULTCOLLELEM VARFLAG_FUIDEFAULT VARFLAG_FNONBROWSABLE
  54.   VARFLAG_FREPLACEABLE VARFLAG_FIMMEDIATEBIND
  55.  
  56.   LIBFLAG_FRESTRICTED LIBFLAG_FCONTROL LIBFLAG_FHIDDEN
  57.   SYS_WIN16 SYS_WIN32 SYS_MAC
  58.  
  59.   FUNC_VIRTUAL FUNC_PUREVIRTUAL FUNC_NONVIRTUAL FUNC_STATIC FUNC_DISPATCH
  60.  
  61.   @VT %TYPEFLAGS @TYPEKIND %IMPLTYPEFLAGS %PARAMFLAGS
  62.   %FUNCFLAGS @CALLCONV @FUNCKIND %INVOKEKIND %VARFLAGS %LIBFLAGS @SYSKIND
  63. );
  64.  
  65. # Lib Flags
  66. # ---------
  67.  
  68. sub LIBFLAG_FRESTRICTED () { 0x01; }
  69. sub LIBFLAG_FCONTROL    () { 0x02; }
  70. sub LIBFLAG_FHIDDEN     () { 0x04; }
  71.  
  72. $LIBFLAGS{LIBFLAG_FRESTRICTED()} = LIBFLAG_FRESTRICTED;
  73. $LIBFLAGS{LIBFLAG_FCONTROL()}    = LIBFLAG_FCONTROL;
  74. $LIBFLAGS{LIBFLAG_FHIDDEN()}     = LIBFLAG_FHIDDEN;
  75.  
  76. # Sys Kind
  77. # --------
  78.  
  79. sub SYS_WIN16 () { 0; }
  80. sub SYS_WIN32 () { SYS_WIN16() + 1; }
  81. sub SYS_MAC   () { SYS_WIN32() + 1; }
  82.  
  83. $SYSKIND[SYS_WIN16] = 'SYS_WIN16';
  84. $SYSKIND[SYS_WIN32] = 'SYS_WIN32';
  85. $SYSKIND[SYS_MAC]   = 'SYS_MAC';
  86.  
  87. # Type Flags
  88. # ----------
  89.  
  90. sub TYPEFLAG_FAPPOBJECT     () { 0x1; }
  91. sub TYPEFLAG_FCANCREATE     () { 0x2; }
  92. sub TYPEFLAG_FLICENSED      () { 0x4; }
  93. sub TYPEFLAG_FPREDECLID     () { 0x8; }
  94. sub TYPEFLAG_FHIDDEN        () { 0x10; }
  95. sub TYPEFLAG_FCONTROL       () { 0x20; }
  96. sub TYPEFLAG_FDUAL          () { 0x40; }
  97. sub TYPEFLAG_FNONEXTENSIBLE () { 0x80; }
  98. sub TYPEFLAG_FOLEAUTOMATION () { 0x100; }
  99. sub TYPEFLAG_FRESTRICTED    () { 0x200; }
  100. sub TYPEFLAG_FAGGREGATABLE  () { 0x400; }
  101. sub TYPEFLAG_FREPLACEABLE   () { 0x800; }
  102. sub TYPEFLAG_FDISPATCHABLE  () { 0x1000; }
  103. sub TYPEFLAG_FREVERSEBIND   () { 0x2000; }
  104.  
  105. $TYPEFLAGS{TYPEFLAG_FAPPOBJECT()}     = TYPEFLAG_FAPPOBJECT;
  106. $TYPEFLAGS{TYPEFLAG_FCANCREATE()}     = TYPEFLAG_FCANCREATE;
  107. $TYPEFLAGS{TYPEFLAG_FLICENSED()}      = TYPEFLAG_FLICENSED;
  108. $TYPEFLAGS{TYPEFLAG_FPREDECLID()}     = TYPEFLAG_FPREDECLID;
  109. $TYPEFLAGS{TYPEFLAG_FHIDDEN()}        = TYPEFLAG_FHIDDEN;
  110. $TYPEFLAGS{TYPEFLAG_FCONTROL()}       = TYPEFLAG_FCONTROL;
  111. $TYPEFLAGS{TYPEFLAG_FDUAL()}          = TYPEFLAG_FDUAL;
  112. $TYPEFLAGS{TYPEFLAG_FNONEXTENSIBLE()} = TYPEFLAG_FNONEXTENSIBLE;
  113. $TYPEFLAGS{TYPEFLAG_FOLEAUTOMATION()} = TYPEFLAG_FOLEAUTOMATION;
  114. $TYPEFLAGS{TYPEFLAG_FRESTRICTED()}    = TYPEFLAG_FRESTRICTED;
  115. $TYPEFLAGS{TYPEFLAG_FAGGREGATABLE()}  = TYPEFLAG_FAGGREGATABLE;
  116. $TYPEFLAGS{TYPEFLAG_FREPLACEABLE()}   = TYPEFLAG_FREPLACEABLE;
  117. $TYPEFLAGS{TYPEFLAG_FDISPATCHABLE()}  = TYPEFLAG_FDISPATCHABLE;
  118. $TYPEFLAGS{TYPEFLAG_FREVERSEBIND()}   = TYPEFLAG_FREVERSEBIND;
  119.  
  120. # Type Kind
  121. # ---------
  122.  
  123. sub TKIND_ENUM      () { 0; }
  124. sub TKIND_RECORD    () { TKIND_ENUM()      + 1; }
  125. sub TKIND_MODULE    () { TKIND_RECORD()    + 1; }
  126. sub TKIND_INTERFACE () { TKIND_MODULE()    + 1; }
  127. sub TKIND_DISPATCH  () { TKIND_INTERFACE() + 1; }
  128. sub TKIND_COCLASS   () { TKIND_DISPATCH()  + 1; }
  129. sub TKIND_ALIAS     () { TKIND_COCLASS()   + 1; }
  130. sub TKIND_UNION     () { TKIND_ALIAS()     + 1; }
  131. sub TKIND_MAX       () { TKIND_UNION()     + 1; }
  132.  
  133. $TYPEKIND[TKIND_ENUM]      = 'TKIND_ENUM';
  134. $TYPEKIND[TKIND_RECORD]    = 'TKIND_RECORD';
  135. $TYPEKIND[TKIND_MODULE]    = 'TKIND_MODULE';
  136. $TYPEKIND[TKIND_INTERFACE] = 'TKIND_INTERFACE';
  137. $TYPEKIND[TKIND_DISPATCH]  = 'TKIND_DISPATCH';
  138. $TYPEKIND[TKIND_COCLASS]   = 'TKIND_COCLASS';
  139. $TYPEKIND[TKIND_ALIAS]     = 'TKIND_ALIAS';
  140. $TYPEKIND[TKIND_UNION]     = 'TKIND_UNION';
  141.  
  142. # Implemented Type Flags
  143. # ----------------------
  144.  
  145. sub IMPLTYPEFLAG_FDEFAULT    () { 0x1; }
  146. sub IMPLTYPEFLAG_FSOURCE    () { 0x2; }
  147. sub IMPLTYPEFLAG_FRESTRICTED    () { 0x4; }
  148. sub IMPLTYPEFLAG_FDEFAULTVTABLE    () { 0x800; }
  149.  
  150. $IMPLTYPEFLAGS{IMPLTYPEFLAG_FDEFAULT()}       = IMPLTYPEFLAG_FDEFAULT;
  151. $IMPLTYPEFLAGS{IMPLTYPEFLAG_FSOURCE()}        = IMPLTYPEFLAG_FSOURCE;
  152. $IMPLTYPEFLAGS{IMPLTYPEFLAG_FRESTRICTED()}    = IMPLTYPEFLAG_FRESTRICTED;
  153. $IMPLTYPEFLAGS{IMPLTYPEFLAG_FDEFAULTVTABLE()} = IMPLTYPEFLAG_FDEFAULTVTABLE;
  154.  
  155. # Parameter Flags
  156. # ---------------
  157.  
  158. sub PARAMFLAG_NONE        () { 0; }
  159. sub PARAMFLAG_FIN         () { 0x1; }
  160. sub PARAMFLAG_FOUT        () { 0x2; }
  161. sub PARAMFLAG_FLCID       () { 0x4; }
  162. sub PARAMFLAG_FRETVAL     () { 0x8; }
  163. sub PARAMFLAG_FOPT        () { 0x10; }
  164. sub PARAMFLAG_FHASDEFAULT () { 0x20; }
  165.  
  166. $PARAMFLAGS{PARAMFLAG_NONE()}        = PARAMFLAG_NONE;
  167. $PARAMFLAGS{PARAMFLAG_FIN()}         = PARAMFLAG_FIN;
  168. $PARAMFLAGS{PARAMFLAG_FOUT()}        = PARAMFLAG_FOUT;
  169. $PARAMFLAGS{PARAMFLAG_FLCID()}       = PARAMFLAG_FLCID;
  170. $PARAMFLAGS{PARAMFLAG_FRETVAL()}     = PARAMFLAG_FRETVAL;
  171. $PARAMFLAGS{PARAMFLAG_FOPT()}        = PARAMFLAG_FOPT;
  172. $PARAMFLAGS{PARAMFLAG_FHASDEFAULT()} = PARAMFLAG_FHASDEFAULT;
  173.  
  174. # Function Flags
  175. # --------------
  176.  
  177. sub FUNCFLAG_FRESTRICTED       () { 0x1; }
  178. sub FUNCFLAG_FSOURCE           () { 0x2; }
  179. sub FUNCFLAG_FBINDABLE         () { 0x4; }
  180. sub FUNCFLAG_FREQUESTEDIT      () { 0x8; }
  181. sub FUNCFLAG_FDISPLAYBIND      () { 0x10; }
  182. sub FUNCFLAG_FDEFAULTBIND      () { 0x20; }
  183. sub FUNCFLAG_FHIDDEN           () { 0x40; }
  184. sub FUNCFLAG_FUSESGETLASTERROR () { 0x80; }
  185. sub FUNCFLAG_FDEFAULTCOLLELEM  () { 0x100; }
  186. sub FUNCFLAG_FUIDEFAULT        () { 0x200; }
  187. sub FUNCFLAG_FNONBROWSABLE     () { 0x400; }
  188. sub FUNCFLAG_FREPLACEABLE      () { 0x800; }
  189. sub FUNCFLAG_FIMMEDIATEBIND    () { 0x1000; }
  190.  
  191. $FUNCFLAGS{FUNCFLAG_FRESTRICTED()}       = FUNCFLAG_FRESTRICTED;
  192. $FUNCFLAGS{FUNCFLAG_FSOURCE()}           = FUNCFLAG_FSOURCE;
  193. $FUNCFLAGS{FUNCFLAG_FBINDABLE()}         = FUNCFLAG_FBINDABLE;
  194. $FUNCFLAGS{FUNCFLAG_FREQUESTEDIT()}      = FUNCFLAG_FREQUESTEDIT;
  195. $FUNCFLAGS{FUNCFLAG_FDISPLAYBIND()}      = FUNCFLAG_FDISPLAYBIND;
  196. $FUNCFLAGS{FUNCFLAG_FDEFAULTBIND()}      = FUNCFLAG_FDEFAULTBIND;
  197. $FUNCFLAGS{FUNCFLAG_FHIDDEN()}           = FUNCFLAG_FHIDDEN;
  198. $FUNCFLAGS{FUNCFLAG_FUSESGETLASTERROR()} = FUNCFLAG_FUSESGETLASTERROR;
  199. $FUNCFLAGS{FUNCFLAG_FDEFAULTCOLLELEM()}  = FUNCFLAG_FDEFAULTCOLLELEM;
  200. $FUNCFLAGS{FUNCFLAG_FUIDEFAULT()}        = FUNCFLAG_FUIDEFAULT;
  201. $FUNCFLAGS{FUNCFLAG_FNONBROWSABLE()}     = FUNCFLAG_FNONBROWSABLE;
  202. $FUNCFLAGS{FUNCFLAG_FREPLACEABLE()}      = FUNCFLAG_FREPLACEABLE;
  203. $FUNCFLAGS{FUNCFLAG_FIMMEDIATEBIND()}    = FUNCFLAG_FIMMEDIATEBIND;
  204.  
  205. # Calling conventions
  206. # -------------------
  207.  
  208. sub CC_FASTCALL   () { 0; }
  209. sub CC_CDECL      () { 1; }
  210. sub CC_MSCPASCAL  () { CC_CDECL()      + 1; }
  211. sub CC_PASCAL     () { CC_MSCPASCAL; }
  212. sub CC_MACPASCAL  () { CC_PASCAL()     + 1; }
  213. sub CC_STDCALL    () { CC_MACPASCAL()  + 1; }
  214. sub CC_FPFASTCALL () { CC_STDCALL()    + 1; }
  215. sub CC_SYSCALL    () { CC_FPFASTCALL() + 1; }
  216. sub CC_MPWCDECL   () { CC_SYSCALL()    + 1; }
  217. sub CC_MPWPASCAL  () { CC_MPWCDECL()   + 1; }
  218. sub CC_MAX        () { CC_MPWPASCAL()  + 1; }
  219.  
  220. $CALLCONV[CC_FASTCALL]   = 'CC_FASTCALL';
  221. $CALLCONV[CC_CDECL]      = 'CC_CDECL';
  222. $CALLCONV[CC_PASCAL]     = 'CC_PASCAL';
  223. $CALLCONV[CC_MACPASCAL]  = 'CC_MACPASCAL';
  224. $CALLCONV[CC_STDCALL]    = 'CC_STDCALL';
  225. $CALLCONV[CC_FPFASTCALL] = 'CC_FPFASTCALL';
  226. $CALLCONV[CC_SYSCALL]    = 'CC_SYSCALL';
  227. $CALLCONV[CC_MPWCDECL]   = 'CC_MPWCDECL';
  228. $CALLCONV[CC_MPWPASCAL]  = 'CC_MPWPASCAL';
  229.  
  230. # Function Kind
  231. # -------------
  232.  
  233. sub FUNC_VIRTUAL     () { 0; }
  234. sub FUNC_PUREVIRTUAL () { FUNC_VIRTUAL()     + 1; }
  235. sub FUNC_NONVIRTUAL  () { FUNC_PUREVIRTUAL() + 1; }
  236. sub FUNC_STATIC      () { FUNC_NONVIRTUAL()  + 1; }
  237. sub FUNC_DISPATCH    () { FUNC_STATIC()      + 1; }
  238.  
  239. $FUNCKIND[FUNC_VIRTUAL]     = 'FUNC_VIRTUAL';
  240. $FUNCKIND[FUNC_PUREVIRTUAL] = 'FUNC_PUREVIRTUAL';
  241. $FUNCKIND[FUNC_NONVIRTUAL]  = 'FUNC_NONVIRTUAL';
  242. $FUNCKIND[FUNC_STATIC]      = 'FUNC_STATIC';
  243. $FUNCKIND[FUNC_DISPATCH]    = 'FUNC_DISPATCH';
  244.  
  245. # Invoke Kind
  246. # -----------
  247.  
  248. sub INVOKE_FUNC           () { 1; }
  249. sub INVOKE_PROPERTYGET    () { 2; }
  250. sub INVOKE_PROPERTYPUT    () { 4; }
  251. sub INVOKE_PROPERTYPUTREF () { 8; }
  252.  
  253. $INVOKEKIND{INVOKE_FUNC()}           = INVOKE_FUNC;
  254. $INVOKEKIND{INVOKE_PROPERTYGET()}    = INVOKE_PROPERTYGET;
  255. $INVOKEKIND{INVOKE_PROPERTYPUT()}    = INVOKE_PROPERTYPUT;
  256. $INVOKEKIND{INVOKE_PROPERTYPUTREF()} = INVOKE_PROPERTYPUTREF;
  257.  
  258. # Variable Flags
  259. # --------------
  260.  
  261. sub VARFLAG_FREADONLY        () { 0x1;    }
  262. sub VARFLAG_FSOURCE          () { 0x2;    }
  263. sub VARFLAG_FBINDABLE        () { 0x4;    }
  264. sub VARFLAG_FREQUESTEDIT     () { 0x8;    }
  265. sub VARFLAG_FDISPLAYBIND     () { 0x10;   }
  266. sub VARFLAG_FDEFAULTBIND     () { 0x20;   }
  267. sub VARFLAG_FHIDDEN          () { 0x40;   }
  268. sub VARFLAG_FRESTRICTED      () { 0x80;   }
  269. sub VARFLAG_FDEFAULTCOLLELEM () { 0x100;  }
  270. sub VARFLAG_FUIDEFAULT       () { 0x200;  }
  271. sub VARFLAG_FNONBROWSABLE    () { 0x400;  }
  272. sub VARFLAG_FREPLACEABLE     () { 0x800;  }
  273. sub VARFLAG_FIMMEDIATEBIND   () { 0x1000; }
  274.  
  275. $VARFLAGS{VARFLAG_FREADONLY()}        = VARFLAG_FREADONLY;
  276. $VARFLAGS{VARFLAG_FSOURCE()}          = VARFLAG_FSOURCE;
  277. $VARFLAGS{VARFLAG_FBINDABLE()}        = VARFLAG_FBINDABLE;
  278. $VARFLAGS{VARFLAG_FREQUESTEDIT()}     = VARFLAG_FREQUESTEDIT;
  279. $VARFLAGS{VARFLAG_FDISPLAYBIND()}     = VARFLAG_FDISPLAYBIND;
  280. $VARFLAGS{VARFLAG_FDEFAULTBIND()}     = VARFLAG_FDEFAULTBIND;
  281. $VARFLAGS{VARFLAG_FHIDDEN()}          = VARFLAG_FHIDDEN;
  282. $VARFLAGS{VARFLAG_FRESTRICTED()}      = VARFLAG_FRESTRICTED;
  283. $VARFLAGS{VARFLAG_FDEFAULTCOLLELEM()} = VARFLAG_FDEFAULTCOLLELEM;
  284. $VARFLAGS{VARFLAG_FUIDEFAULT()}       = VARFLAG_FUIDEFAULT;
  285. $VARFLAGS{VARFLAG_FNONBROWSABLE()}    = VARFLAG_FNONBROWSABLE;
  286. $VARFLAGS{VARFLAG_FREPLACEABLE()}     = VARFLAG_FREPLACEABLE;
  287. $VARFLAGS{VARFLAG_FIMMEDIATEBIND()}   = VARFLAG_FIMMEDIATEBIND;
  288.  
  289.  
  290. # Variant Types
  291. # -------------
  292.  
  293. sub VT_EMPTY           () { 0; }
  294. sub VT_NULL            () { 1; }
  295. sub VT_I2              () { 2; }
  296. sub VT_I4              () { 3; }
  297. sub VT_R4              () { 4; }
  298. sub VT_R8              () { 5; }
  299. sub VT_CY              () { 6; }
  300. sub VT_DATE            () { 7; }
  301. sub VT_BSTR            () { 8; }
  302. sub VT_DISPATCH        () { 9; }
  303. sub VT_ERROR           () { 10; }
  304. sub VT_BOOL            () { 11; }
  305. sub VT_VARIANT         () { 12; }
  306. sub VT_UNKNOWN         () { 13; }
  307. sub VT_DECIMAL         () { 14; }
  308. sub VT_I1              () { 16; }
  309. sub VT_UI1             () { 17; }
  310. sub VT_UI2             () { 18; }
  311. sub VT_UI4             () { 19; }
  312. sub VT_I8              () { 20; }
  313. sub VT_UI8             () { 21; }
  314. sub VT_INT             () { 22; }
  315. sub VT_UINT            () { 23; }
  316. sub VT_VOID            () { 24; }
  317. sub VT_HRESULT         () { 25; }
  318. sub VT_PTR             () { 26; }
  319. sub VT_SAFEARRAY       () { 27; }
  320. sub VT_CARRAY          () { 28; }
  321. sub VT_USERDEFINED     () { 29; }
  322. sub VT_LPSTR           () { 30; }
  323. sub VT_LPWSTR          () { 31; }
  324. sub VT_FILETIME        () { 64; }
  325. sub VT_BLOB            () { 65; }
  326. sub VT_STREAM          () { 66; }
  327. sub VT_STORAGE         () { 67; }
  328. sub VT_STREAMED_OBJECT () { 68; }
  329. sub VT_STORED_OBJECT   () { 69; }
  330. sub VT_BLOB_OBJECT     () { 70; }
  331. sub VT_CF              () { 71; }
  332. sub VT_CLSID           () { 72; }
  333. sub VT_VECTOR          () { 0x1000; }
  334. sub VT_ARRAY           () { 0x2000; }
  335. sub VT_BYREF           () { 0x4000; }
  336. sub VT_RESERVED        () { 0x8000; }
  337. sub VT_ILLEGAL         () { 0xffff; }
  338. sub VT_ILLEGALMASKED   () { 0xfff; }
  339. sub VT_TYPEMASK        () { 0xfff; }
  340.  
  341. $VT[VT_EMPTY]           = 'VT_EMPTY';
  342. $VT[VT_NULL]            = 'VT_NULL';
  343. $VT[VT_I2]              = 'VT_I2';
  344. $VT[VT_I4]              = 'VT_I4';
  345. $VT[VT_R4]              = 'VT_R4';
  346. $VT[VT_R8]              = 'VT_R8';
  347. $VT[VT_CY]              = 'VT_CY';
  348. $VT[VT_DATE]            = 'VT_DATE';
  349. $VT[VT_BSTR]            = 'VT_BSTR';
  350. $VT[VT_DISPATCH]        = 'VT_DISPATCH';
  351. $VT[VT_ERROR]           = 'VT_ERROR';
  352. $VT[VT_BOOL]            = 'VT_BOOL';
  353. $VT[VT_VARIANT]         = 'VT_VARIANT';
  354. $VT[VT_UNKNOWN]         = 'VT_UNKNOWN';
  355. $VT[VT_DECIMAL]         = 'VT_DECIMAL';
  356. $VT[VT_I1]              = 'VT_I1';
  357. $VT[VT_UI1]             = 'VT_UI1';
  358. $VT[VT_UI2]             = 'VT_UI2';
  359. $VT[VT_UI4]             = 'VT_UI4';
  360. $VT[VT_I8]              = 'VT_I8';
  361. $VT[VT_UI8]             = 'VT_UI8';
  362. $VT[VT_INT]             = 'VT_INT';
  363. $VT[VT_UINT]            = 'VT_UINT';
  364. $VT[VT_VOID]            = 'VT_VOID';
  365. $VT[VT_HRESULT]         = 'VT_HRESULT';
  366. $VT[VT_PTR]             = 'VT_PTR';
  367. $VT[VT_SAFEARRAY]       = 'VT_SAFEARRAY';
  368. $VT[VT_CARRAY]          = 'VT_CARRAY';
  369. $VT[VT_USERDEFINED]     = 'VT_USERDEFINED';
  370. $VT[VT_LPSTR]           = 'VT_LPSTR';
  371. $VT[VT_LPWSTR]          = 'VT_LPWSTR';
  372. $VT[VT_FILETIME]        = 'VT_FILETIME';
  373. $VT[VT_BLOB]            = 'VT_BLOB';
  374. $VT[VT_STREAM]          = 'VT_STREAM';
  375. $VT[VT_STORAGE]         = 'VT_STORAGE';
  376. $VT[VT_STREAMED_OBJECT] = 'VT_STREAMED_OBJECT';
  377. $VT[VT_STORED_OBJECT]   = 'VT_STORED_OBJECT';
  378. $VT[VT_BLOB_OBJECT]     = 'VT_BLOB_OBJECT';
  379. $VT[VT_CF]              = 'VT_CF';
  380. $VT[VT_CLSID]           = 'VT_CLSID';
  381. $VT[VT_VECTOR]          = 'VT_VECTOR';
  382. $VT[VT_ARRAY]           = 'VT_ARRAY';
  383. $VT[VT_BYREF]           = 'VT_BYREF';
  384. $VT[VT_RESERVED]        = 'VT_RESERVED';
  385. $VT[VT_ILLEGAL]         = 'VT_ILLEGAL';
  386. $VT[VT_ILLEGALMASKED]   = 'VT_ILLEGALMASKED';
  387. $VT[VT_TYPEMASK]        = 'VT_TYPEMASK';
  388.  
  389. 1;
  390.