# 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;