Browse Source

* has_intf and oaidl

marco 23 years ago
parent
commit
c2478e9ba6
1 changed files with 876 additions and 23 deletions
  1. 876 23
      rtl/win32/activex.pp

+ 876 - 23
rtl/win32/activex.pp

@@ -218,6 +218,10 @@ Const
     CLSCTX_DISABLE_AAA          = $08000;    // Disable EOAC_DISABLE_AAA capability for this activation only
     CLSCTX_ENABLE_AAA           = $10000;    // Enable EOAC_DISABLE_AAA capability for this activation only
     CLSCTX_FROM_DEFAULT_CONTEXT = $20000;    // Begin this activation from the default context of the current apartment
+    CLSCTX_INPROC               = (CLSCTX_INPROC_SERVER OR CLSCTX_INPROC_HANDLER);
+// With DCOM, CLSCTX_REMOTE_SERVER should be included
+    CLSCTX_ALL                  = (CLSCTX_INPROC_SERVER OR CLSCTX_INPROC_HANDLER OR CLSCTX_LOCAL_SERVER {$ifdef Remote} OR CLSCTX_REMOTE_SERVER {$endif});
+    CLSCTX_SERVER               = (CLSCTX_INPROC_SERVER OR CLSCTX_LOCAL_SERVER {$ifdef Remote} OR CLSCTX_REMOTE_SERVER {$endif});
 
 
 // marshaling flags; passed to CoMarshalInterface
@@ -413,8 +417,288 @@ Const
     COLE_DEFAULT_PRINCIPAL {: pOleStr?} = pOleStr(-1);
     COLE_DEFAULT_AUTHINFO  {: pointer?} = pointer(-1);
 
+// DISPID reserved to indicate an \"unknown\" name
+// only reserved for data members (properties); reused as a method dispid below
+
+    DISPID_UNKNOWN              = -1;
+
+// DISPID reserved for the \"value\" property
+
+    DISPID_VALUE                = 0;
+
+// The following DISPID is reserved to indicate the param")
+// that is the right-hand-side (or \"put\" value) of a PropertyPut")
+
+    DISPID_PROPERTYPUT          = -3;
+
+// DISPID reserved for the standard \"NewEnum\" method
+
+    DISPID_NEWENUM              = -4;
+
+// DISPID reserved for the standard \"Evaluate\" method
+
+    DISPID_EVALUATE             = -5;
+    DISPID_CONSTRUCTOR          = -6;
+    DISPID_DESTRUCTOR           = -7;
+    DISPID_COLLECT              = -8;
+
+// The range -500 through -999 is reserved for Controls
+// The range 0x80010000 through 0x8001FFFF is reserved for Controls
+// The range -5000 through -5499 is reserved for ActiveX Accessability
+// The range -2000 through -2499 is reserved for VB5
+// The range -3900 through -3999 is reserved for Forms
+// The range -5500 through -5550 is reserved for Forms
+// The remainder of the negative DISPIDs are reserved for future use
+
+
+    DESCKIND_NONE               = 0;
+    DESCKIND_FUNCDESC           = 1;
+    DESCKIND_VARDESC            = 2;
+    DESCKIND_TYPECOMP           = 3;
+    DESCKIND_IMPLICITAPPOBJ     = 4;
+    DESCKIND_MAX                = 5;
+
+
+    SYS_WIN16                   = 0;
+    SYS_WIN32                   = 1;
+    SYS_MAC                     = 2;
+    SYS_WIN64                   = 3;
+
+
+    LIBFLAG_FRESTRICTED         = $01;
+    LIBFLAG_FCONTROL            = $02;
+    LIBFLAG_FHIDDEN             = $04;
+    LIBFLAG_FHASDISKIMAGE       = $08;
+    TYPEFLAG_FAPPOBJECT         = $01;
+    TYPEFLAG_FCANCREATE         = $02;
+    TYPEFLAG_FLICENSED          = $04;
+    TYPEFLAG_FPREDECLID         = $08;
+    TYPEFLAG_FHIDDEN            = $10;
+    TYPEFLAG_FCONTROL           = $20;
+    TYPEFLAG_FDUAL              = $40;
+    TYPEFLAG_FNONEXTENSIBLE     = $80;
+    TYPEFLAG_FOLEAUTOMATION     = $100;
+    TYPEFLAG_FRESTRICTED        = $200;
+    TYPEFLAG_FAGGREGATABLE      = $400;
+    TYPEFLAG_FREPLACEABLE       = $800;
+    TYPEFLAG_FDISPATCHABLE      = $1000;
+    TYPEFLAG_FREVERSEBIND       = $2000;
+    TYPEFLAG_FPROXY             = $4000;
+
+    FUNCFLAG_FRESTRICTED        = $1;
+    FUNCFLAG_FSOURCE            = $2;
+    FUNCFLAG_FBINDABLE          = $4;
+    FUNCFLAG_FREQUESTEDIT       = $8;
+    FUNCFLAG_FDISPLAYBIND       = $10;
+    FUNCFLAG_FDEFAULTBIND       = $20;
+    FUNCFLAG_FHIDDEN            = $40;
+    FUNCFLAG_FUSESGETLASTERROR  = $80;
+    FUNCFLAG_FDEFAULTCOLLELEM   = $100;
+    FUNCFLAG_FUIDEFAULT         = $200;
+    FUNCFLAG_FNONBROWSABLE      = $400;
+    FUNCFLAG_FREPLACEABLE       = $800;
+    FUNCFLAG_FIMMEDIATEBIND     = $1000;
+
+    VARFLAG_FREADONLY           = $1;
+    VARFLAG_FSOURCE             = $2;
+    VARFLAG_FBINDABLE           = $4;
+    VARFLAG_FREQUESTEDIT        = $8;
+    VARFLAG_FDISPLAYBIND        = $10;
+    VARFLAG_FDEFAULTBIND        = $20;
+    VARFLAG_FHIDDEN             = $40;
+    VARFLAG_FRESTRICTED         = $80;
+    VARFLAG_FDEFAULTCOLLELEM    = $100;
+    VARFLAG_FUIDEFAULT          = $200;
+    VARFLAG_FNONBROWSABLE       = $400;
+    VARFLAG_FREPLACEABLE        = $800;
+    VARFLAG_FIMMEDIATEBIND      = $1000;
+
+    FADF_AUTO                   = USHORT($0001);  // array is allocated on the stack
+    FADF_STATIC                 = USHORT($0002);  // array is staticly allocated
+    FADF_EMBEDDED               = USHORT($0004);  // array is embedded in a structure
+    FADF_FIXEDSIZE              = USHORT($0010);  // may not be resized or reallocated
+    FADF_RECORD                 = USHORT($0020);  // an array of records
+    FADF_HAVEIID                = USHORT($0040);  // with FADF_DISPATCH, FADF_UNKNOWN
+                                                  // array has an IID for interfaces
+    FADF_HAVEVARTYPE            = USHORT($0080);  // array has a VT type
+    FADF_BSTR                   = USHORT($0100);  // an array of BSTRs
+    FADF_UNKNOWN                = USHORT($0200);  // an array of IUnknown*
+    FADF_DISPATCH               = USHORT($0400);  // an array of IDispatch*
+    FADF_VARIANT                = USHORT($0800);  // an array of VARIANTs
+    FADF_RESERVED               = USHORT($F008);  // reserved bits
+
+// IMPLTYPE Flags
+
+    IMPLTYPEFLAG_FDEFAULT       = USHORT($1);
+    IMPLTYPEFLAG_FSOURCE        = USHORT($2);
+    IMPLTYPEFLAG_FRESTRICTED    = USHORT($4);
+    IMPLTYPEFLAG_FDEFAULTVTABLE = USHORT($8);
+
+    PARAMFLAG_NONE              = USHORT($00);
+    PARAMFLAG_FIN               = USHORT($01);
+    PARAMFLAG_FOUT              = USHORT($02);
+    PARAMFLAG_FLCID             = USHORT($04);
+    PARAMFLAG_FRETVAL           = USHORT($08);
+    PARAMFLAG_FOPT              = USHORT($10);
+    PARAMFLAG_FHASDEFAULT       = USHORT($20);
+    PARAMFLAG_FHASCUSTDATA      = USHORT($40);
+
+    VAR_PERINSTANCE             = 0;
+    VAR_STATIC                  = 1;
+    VAR_CONST                   = 2;
+    VAR_DISPATCH                = 3;
+
+    // notification messages used by the dynamic typeinfo protocol.
+
+    CHANGEKIND_ADDMEMBER        = 0;
+    CHANGEKIND_DELETEMEMBER     = 1;
+    CHANGEKIND_SETNAMES         = 2;
+    CHANGEKIND_SETDOCUMENTATION = 3;
+    CHANGEKIND_GENERAL          = 4;
+    CHANGEKIND_INVALIDATE       = 5;
+    CHANGEKIND_CHANGEFAILED     = 6;
+    CHANGEKIND_MAX              = 7;
+
+    INVOKE_FUNC                 = 1;
+    INVOKE_PROPERTYGET          = 2;
+    INVOKE_PROPERTYPUT          = 4;
+    INVOKE_PROPERTYPUTREF       = 8;
+
+    TKIND_ENUM                  = 0;
+    TKIND_RECORD                = 1;
+    TKIND_MODULE                = 2;
+    TKIND_INTERFACE             = 3;
+    TKIND_DISPATCH              = 4;
+    TKIND_COCLASS               = 5;
+    TKIND_ALIAS                 = 6;
+    TKIND_UNION                 = 7;
+    TKIND_MAX                   = 8;                 // end of enum marker
+
+    SF_ERROR                    = VT_ERROR;
+    SF_I1                       = VT_I1;
+    SF_I2                       = VT_I2;
+    SF_I4                       = VT_I4;
+    SF_I8                       = VT_I8;
+    SF_BSTR                     = VT_BSTR;
+    SF_UNKNOWN                  = VT_UNKNOWN;
+    SF_DISPATCH                 = VT_DISPATCH;
+    SF_VARIANT                  = VT_VARIANT;
+    SF_RECORD                   = VT_RECORD;
+    SF_HAVEIID                  = VT_UNKNOWN OR VT_RESERVED;
+    IDLFLAG_NONE                = PARAMFLAG_NONE;
+    IDLFLAG_FIN                 = PARAMFLAG_FIN;
+    IDLFLAG_FOUT                = PARAMFLAG_FOUT;
+    IDLFLAG_FLCID               = PARAMFLAG_FLCID;
+    IDLFLAG_FRETVAL             = PARAMFLAG_FRETVAL;
+
+    CC_FASTCALL                 = 0;
+    CC_CDECL                    = 1;
+    CC_MSCPASCAL                = 2;
+    CC_PASCAL                   = CC_MSCPASCAL;
+    CC_MACPASCAL                = 3;
+    CC_STDCALL                  = 4;
+    CC_FPFASTCALL               = 5;
+    CC_SYSCALL                  = 6;
+    CC_MPWCDECL                 = 7;
+    CC_MPWPASCAL                = 8;
+    CC_MAX                      = 9;   // end of enum marker
+
+    FUNC_VIRTUAL                = 0;
+    FUNC_PUREVIRTUAL            = 1;
+    FUNC_NONVIRTUAL             = 2;
+    FUNC_STATIC                 = 3;
+    FUNC_DISPATCH               = 4;
+
+// objbase.h
+
+    MARSHALINTERFACE_MIN        = 500; // minimum number of bytes for interface marshl
+
+//
+// Common typedefs for paramaters used in Storage API's, gleamed from storage.h
+// Also contains Storage error codes, which should be moved into the storage
+// idl files.
+//
+
+
+    CWCSTORAGENAME              = 32;
+
+// Storage instantiation modes
+    STGM_DIRECT                 = $00000000;
+    STGM_TRANSACTED             = $00010000;
+    STGM_SIMPLE                 = $08000000;
+    STGM_READ                   = $00000000;
+    STGM_WRITE                  = $00000001;
+    STGM_READWRITE              = $00000002;
+    STGM_SHARE_DENY_NONE        = $00000040;
+    STGM_SHARE_DENY_READ        = $00000030;
+    STGM_SHARE_DENY_WRITE       = $00000020;
+    STGM_SHARE_EXCLUSIVE        = $00000010;
+    STGM_PRIORITY               = $00040000;
+    STGM_DELETEONRELEASE        = $04000000;
+    STGM_NOSCRATCH              = $00100000;   {WINNT+}
+    STGM_CREATE                 = $00001000;
+    STGM_CONVERT                = $00020000;
+    STGM_FAILIFTHERE            = $00000000;
+    STGM_NOSNAPSHOT             = $00200000;
+    STGM_DIRECT_SWMR            = $00400000;   { Win2000+}
+
+//  flags for internet asyncronous and layout docfile
+    ASYNC_MODE_COMPATIBILITY    = $00000001;
+    ASYNC_MODE_DEFAULT          = $00000000;
+
+    STGTY_REPEAT                = $00000100;
+    STG_TOEND                   = $FFFFFFFF;
+
+    STG_LAYOUT_SEQUENTIAL       = $00000000;
+    STG_LAYOUT_INTERLEAVED      = $00000001;
+
+    STGFMT_STORAGE              = 0;
+    STGFMT_NATIVE               = 1;
+    STGFMT_FILE                 = 3;
+    STGFMT_ANY                  = 4;
+    STGFMT_DOCFILE              = 5;
+
+// This is a legacy define to allow old component to builds
+    STGFMT_DOCUMENT             = 0;
+
+
+// COM initialization flags; passed to CoInitialize.
+    COINIT_APARTMENTTHREADED    = $2;      // Apartment model
+
+  // These constants are only valid on Windows NT 4.0
+
+    COINIT_MULTITHREADED        = $0;      // OLE calls objects on any thread.
+    COINIT_DISABLE_OLE1DDE      = $4;      // Don't use DDE for Ole1 support.
+    COINIT_SPEED_OVER_MEMORY    = $8;      // Trade memory for speed.
+
+    SMEXF_SERVER                = $01;     // server side aggregated std marshaler
+    SMEXF_HANDLER               = $02;     // client side (handler) agg std marshaler
+
+
+
+    COWAIT_WAITALL              = 1;
+    COWAIT_ALERTABLE            = 2;
+
 TYPE
-    VARTYPE     = USHORT;
+    VARTYPE             = USHORT;
+
+//TypeInfo stuff.
+
+    DISPID              = Long ;
+    SCODE               = Long;
+    pSCODE              = ^SCODE;
+    lpDISPID            = ^DISPID;
+    MEMBERID            = DispId;
+    HREFTYPE            = DWord;
+
+
+// Enums
+    VARKIND             = DWord;
+    DESCKIND            = DWord;
+    SYSKIND             = DWord;
+    FUNCKIND            = DWord;
+    CHANGEKIND          = DWord;
+    CALLCONV            = DWord;
 
     PCOAUTHIDENTITY    = ^TCOAUTHIDENTITY;
     _COAUTHIDENTITY    = Record
@@ -453,7 +737,7 @@ TYPE
    PMultiQI            = ^Multi_QI;
    tagMULTI_QI         = Record
                           iid: piid;                   // pass this one in
-                          itf: IUnknown;                // get these out (you must set to NULL before calling)
+                          itf: pointer {IUnknown};                // get these out (you must set to NULL before calling)
                           hr : Hresult;
                           END;
    MULTI_QI            = TagMULTI_QI;
@@ -945,9 +1229,39 @@ TYPE
    FLAG_STGMEDIUM               = _FLAG_STGMEDIUM;
 
 
+   VARIANTARG                   = VARIANT;
+   LPVARIANT                    = ^VARIANT;
+   LPVARIANTARG                 = ^VARIANT;
+
+// parameter description
+
+   tagPARAMDESCEX               = Record
+                                    cBytes         : ULong;      // size of this structure
+                                    varDefaultValue: VariantARG; // default value of this parameter
+                                    End;
+
+   PARAMDESCEX                  = tagPARAMDESCEX;
+   LPPARAMDESCEX                = ^PARAMDESCEX;
+
+   tagPARAMDESC                 = Record
+                                    pparamdescex: LPPARAMDESCEX ;  // valid if PARAMFLAG_FHASDEFAULT bit is set
+                                    wParamFlags : UShort ;         // IN, OUT, etc
+                                    End;
+
+   PARAMDESC                    = tagPARAMDESC;
+   LPPARAMDESC                  = ^PARAMDESC;
+
+
+   tagSAFEARRAYBOUND            = Record
+                                     cElements : ULong;
+                                     lLbound   : Long;
+                                     End;
+   SAFEARRAYBOUND               = tagSAFEARRAYBOUND;
+   LPSAFEARRAYBOUND             = ^SAFEARRAYBOUND;
+
 // additional interface information about the incoming call
    tagINTERFACEINFO             = Record
-                                    Unk     : IUnknown;   // the pointer to the object
+                                    Unk     : Pointer {IUnknown};   // the pointer to the object
                                     IID     : Tiid;       // interface id
                                     wMethod : WORD;        // interface method
                                     End;
@@ -987,6 +1301,177 @@ TYPE
    STATDATA                     = TagStatData;
    LPStatData                   = ^StatData;
 
+   pARRAYDESC                   = ^ARRAYDESC;
+   pTYPEDESC                    = ^TYPEDESC;
+   tagTYPEKIND                  = Dword;
+   TYPEKIND                     = tagTYPEKIND;
+   INVOKEKIND                   = Dword;
+   tagTYPEDESC                  = Record
+                                    Case Integer OF
+                                      VT_PTR,
+                                      VT_SAFEARRAY   :  (lptdesc : PTYPEDESC;vt : VARTYPE);
+                                      VT_CARRAY      :  (lpadesc : PARRAYDESC);
+                                      VT_USERDEFINED :  (hreftype : HREFTYPE);
+                                      End;
+   TYPEDESC                     = tagTYPEDESC;
+
+
+
+
+   tagARRAYDESC                 = Record
+                                     tdescElem   : TYPEDESC;                       // element type
+                                     cDims       : USHORT;
+                                     rgbounds    : ARRAY [0..0] OF SAFEARRAYBOUND; // dimension count
+                                     End;
+
+   ARRAYDESC                    = tagARRAYDESC;
+
+   tagIDLDESC                   = Record
+                                    dwReserved     : pULONG;
+                                    wIDLFlags      : USHORT;           // IN, OUT, etc
+                                    End;
+   IDLDESC                      = tagIDLDESC;
+   LPIDLDESC                    = ^IDLDESC;
+
+
+   tagELEMDESC                  = Record
+                                    tdesc : TYPEDESC;
+                                    case Integer Of
+                                      0 : (idldesc    : IDLDESC);
+                                      1 : (paramdesc  : PARAMDESC);
+                                      END;
+
+   ELEMDESC                     = tagELEMDESC;
+   LPELEMDESC                   = ^ELEMDESC;
+   tagVARDESC                   = Record
+                                    memId               : MEMBERID;
+                                    lpstrSchema         : pOleStr;
+                                    CASE Integer OF
+                                    VAR_PERINSTANCE,
+                                    VAR_DISPATCH,
+                                    VAR_STATIC       : (oInst   : ULong;                          // offset of variable within the instance
+                                                        ElemdescVar : ELEMDESC;
+                                                        wVarFlags   : WORD;
+                                                        varkind     : VARKIND);
+                                    VAR_CONST        : (lpvarValue : PVARIANT);                       // the value of the constant
+                                    End;
+  VARDESC                       = tagVARDESC;
+  LPVARDESC                     = ^VARDESC;
+  tagDISPPARAMS                 = Record
+                                   rgvarg            : lpVARIANTARG;
+                                   rgdispipNamedArgs : lpDISPID;
+                                   cArgs,
+                                   cNamedArgs        : UINT;
+                                   End;
+  DISPPARAMS                    = tagDISPPARAMS;
+  tagEXCEPINFO                  = Record
+                                    wCode,                         // An error code describing the error.
+                                    wReserved      : Word;
+                                    Source,                        // A source of the exception
+                                    Description,                   // A description of the error
+                                    HelpFile       : WideString;   // Fully qualified drive, path, and file name
+                                    dwHelpContext  : DWord;    // help context of topic within the help file
+                                                                   // We can use ULONG_PTR here, because EXCEPINFO is marshalled by RPC
+                                                                   // RPC will marshal pfnDeferredFillIn.
+                                    pvReserved,
+                                    pfnDeferredFillIn : pULONG;
+                                    SCODE          : scode;
+                                    End;
+
+  EXCEPINFO                     =  tagEXCEPINFO;
+
+  tagTYPEATTR                   = Record
+                                   GUID            : Tguid;       // the GUID of the TypeInfo
+                                   LCID            : lcid;        // locale of member names and doc strings
+                                   dwReserved      : DWord;
+                                   memidConstructor,              // ID of constructor, MEMBERID_NIL if none
+                                   memidDestructor : MemberID;    // ID of destructor, MEMBERID_NIL if none
+                                   lpstrSchema     : pOleStr;
+
+                                   cbSizeInstance  : ULong;       // the size of an instance of this type
+                                   typekind        : TYPEKIND;    // the kind of type this typeinfo describes
+                                   cFuncs,                        // number of functions
+                                   cVars,                         // number of variables / data members
+                                   cImplTypes,                    // number of implemented interfaces
+                                   cbSizeVft,                     // the size of this types virtual func table
+                                   cbAlignment,                   { specifies the alignment requirements for
+                                                                    an instance of this type,
+                                                                      0 = align on 64k boundary
+                                                                      1 = byte align
+                                                                      2 = word align
+                                                                      4 = dword align... }
+                                   wTypeFlags,
+                                   wMajorVerNum,                  // major version number
+                                   wMinorVerNum    : Word;        // minor version number
+                                   tdescAlias      : TYPEDESC;    { if typekind == TKIND_ALIAS this field
+                                                                    specifies the type for which this type
+                                                                    is an alias }
+                                   idldescType     : IDLDESC;     // IDL attributes of the described type
+                                   END;
+  TYPEATTR                       = tagTYPEATTR;
+
+  LPTYPEATTR                     = ^TYPEATTR;
+
+  tagTLIBATTR                    = Record
+                                     GUID        : guid;
+                                     LCID        : lcid;
+                                     SYSKIND     : syskind;
+                                     wMajorVerNum,
+                                     wMinorVerNum,
+                                     wLibFlags   : Word
+                                     End;
+
+  TLIBATTR                       = tagTLIBATTR;
+  LPTLIBATTR                     = ^tagTLIBATTR;
+
+  LPFUNCDESC                     = ^FUNCDESC;
+
+  tagFUNCDESC                    = Record
+                                     memid             : MEMBERID;
+                                     lprgscode         : pSCODE;
+                                     lprgelemdescParam : lpELEMDESC;    // array of param types
+                                     FUNCKIND          : funckind;
+                                     invkind           : INVOKEKIND;
+                                     callconv          : CALLCONV;
+                                     cParams,
+                                     cParamsOpt,
+                                     oVft,
+                                     cScodes           : SHORT;
+                                     elemdescFunc      : ELEMDESC;
+                                     wFuncFlags        : WORD;
+                                     End;
+  FUNCDESC                       = tagFUNCDESC;
+
+
+  tagBINDPTR                     = Record
+                                     case integer Of
+                                      0 : (lpfuncdesc : LPFUNCDESC);
+                                      1 : (lpvardesc  : LPVARDESC);
+                                      2 : (lptcomp    : Pointer {ITypeComp} );
+                                      End;
+  BINDPTR                        = tagBINDPTR;
+  LPBINDPTR                      = ^BINDPTR;
+
+  tagCUSTDATAITEM                = Record
+                                     GUID         : TGuid;           // guid identifying this custom data item
+                                     varValue     : VARIANTARG;      // value of this custom data item
+                                     End;
+
+  CUSTDATAITEM                   = tagCUSTDATAITEM;
+
+  LPCUSTDATAITEM                 = ^CUSTDATAITEM;
+
+  tagCUSTDATA                    = Record
+                                     cCustData   : DWord;             // number of custom data items in rgCustData
+                                     prgCustData : LPCUSTDATAITEM;    // array of custom data items
+                                     End;
+
+  CUSTDATA                       = tagCUSTDATA;
+  LPCUSTDATA                     = ^CUSTDATA;
+
+//  CURRENCY                       = CY;
+
+{$IFDEF HAS_INTF}
 
 // Forward interfaces.
 
@@ -1002,13 +1487,35 @@ TYPE
    IAsyncManager       = Interface;
    ICallFactory        = Interface;
    ISynchronize        = Interface;
+   ITypeLib            = Interface;
+
+// Unknwn.idl
+
+// IUnknown is in classesh.inc
+
+   AsyncIUnknown = Interface( IUnknown)
+      ['{000e0000-0000-0000-C000-000000000046}']
+        Function Begin_QueryInterface(Const riid : TIID): HResult; StdCall;
+        Function Finish_QueryInterface(Out ppvObject : Pointer):HResult;StdCall;
+        Function Begin_AddRef:HResult;StdCall;
+        Function Finish_AddRef:ULong;StdCall;
+        Function Begin_Release:HResult;StdCall;
+        Function Finish_Release:ULong;StdCall;
+        End;
+
+   IClassFactory = Interface(IUnknown)
+      ['{00000001-0000-0000-C000-000000000046}']
+      Function CreateInstance(Const unkOuter:IUnknown;Const riid : TIID;Out vObject : Pointer):HResult; StdCall;
+      Function LockServer(fLock : Bool):HResult;StdCall;
+      End;
+
 
+// objidl.idl
 
 {****************************************************************************
  *  Component Object Interfaces
  ****************************************************************************}
 
-
      IMarshal = Interface(IUnknown)
         ['{00000003-0000-0000-C000-000000000046}']
         Function GetUnmarshalClass ( Const riid: TIID; pv:Pointer; Const dwDestContext:DWord;
@@ -1192,32 +1699,29 @@ TYPE
        Function Clone(Out penum:IEnumString):HResult;StdCall;
        End;
 
-
-       ISequentialStream = interface(IUnknown)
-          ['{0c733a30-2a1c-11ce-ade5-00aa0044773d}']
-          function Read(pv : Pointer;cb : DWord;pcbRead : PDWord) : HRESULT;stdcall;
-          function Write(pv : Pointer;cb : DWord;pcbWritten : PDWord): HRESULT;stdcall;
+    ISequentialStream = interface(IUnknown)
+       ['{0c733a30-2a1c-11ce-ade5-00aa0044773d}']
+       function Read(pv : Pointer;cb : DWord;pcbRead : PDWord) : HRESULT;stdcall;
+       function Write(pv : Pointer;cb : DWord;pcbWritten : PDWord): HRESULT;stdcall;
        end;
 
-       IStream = interface(ISequentialStream)
-          ['{0000000C-0000-0000-C000-000000000046}']
-          function Seek(dlibMove : Large_integer; dwOrigin: Longint;
+    IStream = interface(ISequentialStream)
+       ['{0000000C-0000-0000-C000-000000000046}']
+       function Seek(dlibMove : Large_integer; dwOrigin: Longint;
             out libNewPosition : Large_Integer): HResult; stdcall;
-          function SetSize(libNewSize : Large_Integer) : HRESULT;stdcall;
-          function CopyTo(stm: IStream;cb : Large_Integer;out cbRead : Large_Integer;
+       function SetSize(libNewSize : Large_Integer) : HRESULT;stdcall;
+       function CopyTo(stm: IStream;cb : Large_Integer;out cbRead : Large_Integer;
             out cbWritten: Large_Integer) : HRESULT;stdcall;
-          function Commit(grfCommitFlags : Longint) : HRESULT; stdcall;
-          function Revert : HRESULT; stdcall;
-          function LockRegion(libOffset : Large_Integer;cb : Large_Integer;
+       function Commit(grfCommitFlags : Longint) : HRESULT; stdcall;
+       function Revert : HRESULT; stdcall;
+       function LockRegion(libOffset : Large_Integer;cb : Large_Integer;
             dwLockType: Longint) : HRESULT;stdcall;
-          function UnlockRegion(libOffset: Large_Integer;cb: Large_Integer;
+       function UnlockRegion(libOffset: Large_Integer;cb: Large_Integer;
             dwLockType: Longint) : HRESULT;stdcall;
-          function Stat(out statstg : TStatStg; grfStatFlag: Longint): HRESULT;stdcall;
-          function Clone(out stm : IStream) : HRESULT; stdcall;
+       Function Stat(out statstg : TStatStg; grfStatFlag: Longint): HRESULT;stdcall;
+       function Clone(out stm : IStream) : HRESULT; stdcall;
        end;
 
-
-
     IEnumSTATSTG = Interface (IUnknown)
        ['{0000000d-0000-0000-C000-000000000046}']
         Function Next (Celt:ULong;Out xcelt;pceltfetched : PUlong):HResult; StdCall;
@@ -1764,12 +2268,361 @@ TYPE
        Function ResetInitializerTimeout(dwSecondsRemaining:DWord):HResult; StdCall;
        End;
 
+
+// Interfaces from OAIDL.IDL
+
+   ITypeInfo = Interface;
+
+   ICreateTypeInfo = Interface (IUnknown)
+     ['{00020405-0000-0000-C000-000000000046}']
+     Function  SetGuid(CONST guid: TGUID):HResult;StdCall;
+     Function  SetTypeFlags(uTypeFlags: UINT):HResult;StdCall;
+     Function  SetDocString(pStrDoc: pOleStr):HResult;StdCall;
+     Function  SetHelpContext(dwHelpContext: DWORD):HResult;StdCall;
+     Function  SetVersion(wMajorVerNum: WORD; wMinorVerNum: WORD):HResult;StdCall;
+     Function  AddRefTypeInfo(CONST pTInfo: ITypeInfo; CONST phRefType: HREFTYPE):HResult;StdCall;
+     Function  AddFuncDesc(index: UINT; CONST pFuncDesc: FUNCDESC):HResult;StdCall;
+     Function  AddImplType(index: UINT; hRefType: HREFTYPE):HResult;StdCall;
+     Function  SetImplTypeFlags(index: UINT; implTypeFlags: INT):HResult;StdCall;
+     Function  SetAlignment(cbAlignment: WORD):HResult;StdCall;
+     Function  SetSchema(pStrSchema: pOleStr):HResult;StdCall;
+     Function  AddVarDesc(index: UINT; CONST pVarDesc: VARDESC):HResult;StdCall;
+     Function  SetFuncAndParamNames(index: UINT; CONST rgszNames: pOleStr; cNames: UINT):HResult;StdCall;
+     Function  SetVarName(index: UINT; szName: pOleStr):HResult;StdCall;
+     Function  SetTypeDescAlias(CONST pTDescAlias: TYPEDESC):HResult;StdCall;
+     Function  DefineFuncAsDllEntry(index: UINT; szDllName: pOleStr; szProcName: pOleStr):HResult;StdCall;
+     Function  SetFuncDocString(index: UINT; szDocString: pOleStr):HResult;StdCall;
+     Function  SetVarDocString(index: UINT; szDocString: pOleStr):HResult;StdCall;
+     Function  SetFuncHelpContext(index: UINT; dwHelpContext: DWORD):HResult;StdCall;
+     Function  SetVarHelpContext(index: UINT; dwHelpContext: DWORD):HResult;StdCall;
+     Function  SetMops(index: UINT; Const bstrMops: WideString):HResult;StdCall;
+     Function  SetTypeIdldesc(CONST pIdlDesc: IDLDESC):HResult;StdCall;
+     Function  LayOut():HResult;StdCall;
+     End;
+
+   ICreateTypeInfo2 = Interface (ICreateTypeInfo)
+     ['{0002040E-0000-0000-C000-000000000046}']
+     Function  DeleteFuncDesc(index: UINT):HResult;StdCall;
+     Function  DeleteFuncDescByMemId(memid: MEMBERID; invKind: INVOKEKIND):HResult;StdCall;
+     Function  DeleteVarDesc(index: UINT):HResult;StdCall;
+     Function  DeleteVarDescByMemId(memid: MEMBERID):HResult;StdCall;
+     Function  DeleteImplType(index: UINT):HResult;StdCall;
+     Function  SetCustData(CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetFuncCustData(index: UINT; CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetParamCustData(indexFunc: UINT; indexParam: UINT; CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetVarCustData(index: UINT; CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetImplTypeCustData(index: UINT; CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetHelpStringContext(dwHelpStringContext: ULONG):HResult;StdCall;
+     Function  SetFuncHelpStringContext(index: UINT; dwHelpStringContext: ULONG):HResult;StdCall;
+     Function  SetVarHelpStringContext(index: UINT; dwHelpStringContext: ULONG):HResult;StdCall;
+     Function  Invalidate():HResult;StdCall;
+     Function  SetName(szName: pOleStr):HResult;StdCall;
+     End;
+
+   ICreateTypeLib = Interface (IUnknown)
+     ['{00020406-0000-0000-C000-000000000046}']
+     Function  CreateTypeInfo(szName: pOleStr; tkind: TYPEKIND; OUT ppCTInfo: ICreateTypeInfo):HResult;StdCall;
+     Function  SetName(szName: pOleStr):HResult;StdCall;
+     Function  SetVersion(wMajorVerNum: WORD; wMinorVerNum: WORD):HResult;StdCall;
+     Function  SetGuid(CONST guid: TGUID):HResult;StdCall;
+     Function  SetDocString(szDoc: pOleStr):HResult;StdCall;
+     Function  SetHelpFileName(szHelpFileName: pOleStr):HResult;StdCall;
+     Function  SetHelpContext(dwHelpContext: DWORD):HResult;StdCall;
+     Function  SetLcid(lcid: LCID):HResult;StdCall;
+     Function  SetLibFlags(uLibFlags: UINT):HResult;StdCall;
+     Function  SaveAllChanges():HResult;StdCall;
+     End;
+
+   ICreateTypeLib2 = Interface (ICreateTypeLib)
+    ['{0002040F-0000-0000-C000-000000000046}']
+     Function  DeleteTypeInfo(szName: pOleStr):HResult;StdCall;
+     Function  SetCustData(CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetHelpStringContext(dwHelpStringContext: ULONG):HResult;StdCall;
+     Function  SetHelpStringDll(szFileName: pOleStr):HResult;StdCall;
+     End;
+
+   IDispatch = Interface (IUnknown)
+     ['{00020400-0000-0000-C000-000000000046}']
+     Function  GetTypeInfoCount(OUT pctinfo: UINT):HResult;StdCall;
+     Function  GetTypeInfo(iTInfo: UINT; lcid: LCID; OUT ppTInfo: ITypeInfo):HResult;StdCall;
+     Function  GetIDsOfNames(CONST riid: TIID; CONST rgszNames: pOleStr; cNames: UINT; lcid: LCID; OUT rgDispId: DISPID):HResult;StdCall;
+     {$ifndef Call_as}
+     Function  Invoke(dispIdMember: DISPID; CONST riid: TIID; lcid: LCID; wFlags: WORD; VAR pDispParams: DISPPARAMS; OUT pVarResult: VARIANT; OUT pExcepInfo: EXCEPINFO; OUT puArgErr: UINT):HResult;StdCall;
+     {$else}
+     Function  Invoke(dispIdMember: DISPID; CONST riid: TIID; lcid: LCID; dwFlags: DWORD; CONST pDispParams: DISPPARAMS; OUT pVarResult: VARIANT; OUT pExcepInfo: EXCEPINFO; OUT pArgErr: UINT;
+                     cVarRef: UINT; CONST rgVarRefIdx: UINT; VAR rgVarRef: VARIANTARG):HResult;StdCall;
+     {$endif}
+     End;
+
+   IEnumVARIANT = Interface (IUnknown)
+     ['{00020404-0000-0000-C000-000000000046}']
+     {$ifndef Call_as}
+      Function  Next(celt: ULONG; OUT rgVar: VARIANT; OUT pCeltFetched: ULONG):HResult;StdCall;
+     {$else}
+      Function  Next(celt: ULONG; OUT rgVar: VARIANT; OUT pCeltFetched: ULONG):HResult;StdCall;
+     {$endif}
+     Function  Skip(celt: ULONG):HResult;StdCall;
+     Function  Reset():HResult;StdCall;
+     Function  Clone(OUT ppEnum: IEnumVARIANT):HResult;StdCall;
+     End;
+
+   ITypeComp = Interface (IUnknown)
+     ['{00020403-0000-0000-C000-000000000046}']
+     {$ifndef Call_as}
+      Function  Bind(szName: pOleStr; lHashVal: ULONG; wFlags: WORD; OUT ppTInfo: ITypeInfo; OUT pDescKind: DESCKIND; OUT pBindPtr: BINDPTR):HResult;StdCall;
+      Function  BindType(szName: pOleStr; lHashVal: ULONG; OUT ppTInfo: ITypeInfo; OUT ppTComp: ITypeComp):HResult;StdCall;
+     {$else}
+      Function  Bind(szName: pOleStr; lHashVal: ULONG; wFlags: WORD; OUT ppTInfo: ITypeInfo; OUT pDescKind: DESCKIND; OUT ppFuncDesc: LPFUNCDESC; OUT ppVarDesc: LPVARDESC; O
+      Function  BindType(szName: pOleStr; lHashVal: ULONG; OUT ppTInfo: ITypeInfo):HResult;StdCall;
+     {$endif}
+     End;
+
+   ITypeInfo = Interface (IUnknown)
+     ['{00020401-0000-0000-C000-000000000046}']
+     {$ifndef Call_as}
+      Function  GetTypeAttr(OUT ppTypeAttr: lpTYPEATTR):HResult;StdCall;
+     {$else}
+      Function  GetTypeAttr(OUT ppTypeAttr: LPTYPEATTR; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
+     {$endif}
+      Function  GetTypeComp(OUT ppTComp: ITypeComp):HResult;StdCall;
+     {$ifndef Call_as}
+      Function  GetFuncDesc(index: UINT; OUT ppFuncDesc: lpFUNCDESC):HResult;StdCall;
+      Function  GetVarDesc(index: UINT; OUT ppVarDesc: lpVARDESC):HResult;StdCall;
+      Function  GetNames(memid: MEMBERID; OUT rgBstrNames: WideString; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
+     {$else}
+      Function  GetFuncDesc(index: UINT; OUT ppFuncDesc: LPFUNCDESC; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
+      Function  GetVarDesc(index: UINT; OUT ppVarDesc: LPVARDESC; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
+      Function  GetNames(memid: MEMBERID; OUT rgBstrNames: WideString; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
+     {$endif}
+     Function  GetRefTypeOfImplType(index: UINT; OUT pRefType: HREFTYPE):HResult;StdCall;
+     Function  GetImplTypeFlags(index: UINT; OUT pImplTypeFlags: INT):HResult;StdCall;
+     {$ifndef Call_as}
+      Function  GetIDsOfNames(CONST rgszNames: pOleStr; cNames: UINT; OUT pMemId: MEMBERID):HResult;StdCall;
+     {$else}
+      Function  LocalGetIDsOfNames():HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+     Function  Invoke(pvInstance: Pointer; memid: MEMBERID; wFlags: WORD; VAR pDispParams: DISPPARAMS; OUT pVarResult: VARIANT; OUT pExcepInfo: EXCEPINFO; OUT puArgErr: UINT):HResult;StdCall;
+     {$else}
+     Function  LocalInvoke ():HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+     Function  GetDocumentation(memid: MEMBERID; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+     {$else}
+     Function  GetDocumentation(memid: MEMBERID; refPtrFlags: DWORD; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+     {$endif}
+
+     {$ifndef Call_as}
+     Function  GetDllEntry(memid: MEMBERID; invKind: INVOKEKIND; OUT pBstrDllName: WideString; OUT pBstrName: WideString; OUT pwOrdinal: WORD):HResult;StdCall;
+     {$else}
+     Function  GetDllEntry(memid: MEMBERID; invKind: INVOKEKIND; refPtrFlags: DWORD; OUT pBstrDllName: WideString; OUT pBstrName: WideString; OUT pwOrdinal: WORD):HResult;StdCall;
+     {$endif}
+
+     Function  GetRefTypeInfo(hRefType: HREFTYPE; OUT ppTInfo: ITypeInfo):HResult;StdCall;
+
+     {$ifndef Call_as}
+      Function  AddressOfMember(memid: MEMBERID; invKind: INVOKEKIND; OUT ppv: Pointer):HResult;StdCall;
+     {$else}
+      Function  LocalAddressOfMember():HResult;StdCall;
+     {$endif}
+
+     {$ifndef Call_as}
+      Function  CreateInstance(CONST pUnkOuter: IUnknown; CONST riid: TIID; OUT ppvObj: Pointer):HResult;StdCall;
+     {$else}
+      Function  CreateInstance(CONST riid: TIID; OUT ppvObj: pIUnknown):HResult;StdCall;
+     {$endif}
+     Function  GetMops(memid: MEMBERID; OUT pBstrMops: WideString):HResult;StdCall;
+     {$ifndef Call_as}
+     Function  GetContainingTypeLib(OUT ppTLib: ITypeLib; OUT pIndex: UINT):HResult;StdCall;
+     {$else}
+     Function  GetContainingTypeLib(OUT ppTLib: ITypeLib; OUT pIndex: UINT):HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+      Procedure ReleaseTypeAttr(Const pTypeAttr: TypeAttr); StdCall;
+     {$else}
+      Function  ReleaseTypeAttr():HResult;StdCall;
+     {$endif}
+
+     {$ifndef Call_as}
+      Procedure ReleaseFuncDesc(const pFuncDesc : FUNCDESC); StdCall;
+     {$else}
+      Function  LocalReleaseFuncDesc():HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+      Procedure ReleaseVarDesc(Const pVarDesc : VarDesc);
+     {$else}
+      Function  LocalReleaseVarDesc():HResult;StdCall;
+     {$endif}
+     End;
+
+   ITypeInfo2 = Interface (ITypeInfo)
+     ['{00020412-0000-0000-C000-000000000046}']
+     Function  GetTypeKind(OUT xpTypeKind: TYPEKIND):HResult;StdCall;
+     Function  GetTypeFlags(OUT pTypeFlags: ULONG):HResult;StdCall;
+     Function  GetFuncIndexOfMemId(memid: MEMBERID; invKind: INVOKEKIND; OUT pFuncIndex: UINT):HResult;StdCall;
+     Function  GetVarIndexOfMemId(memid: MEMBERID; OUT pVarIndex: UINT):HResult;StdCall;
+     Function  GetCustData(CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     Function  GetFuncCustData(index: UINT; CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     Function  GetParamCustData(indexFunc: UINT; indexParam: UINT; CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     Function  GetVarCustData(index: UINT; CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     Function  GetImplTypeCustData(index: UINT; CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     {$ifndef Call_as}
+      Function  GetDocumentation2(memid: MEMBERID; lcid: LCID; OUT pbstrHelpString: WideString; OUT pdwHelpStringContext: DWORD; OUT pbstrHelpStringDll: WideString):HResult;StdCall;
+     {$else}
+      Function  GetDocumentation2(memid: MEMBERID; lcid: LCID; refPtrFlags: DWORD; OUT pbstrHelpString: WideString; OUT pdwHelpStringContext: DWORD; OUT pbstrHelpStringDll: WideString):HResult;StdCall;
+     {$endif}
+     Function  GetAllCustData(OUT pCustData: CUSTDATA):HResult;StdCall;
+     Function  GetAllFuncCustData(index: UINT; OUT pCustData: CUSTDATA):HResult;StdCall;
+     Function  GetAllParamCustData(indexFunc: UINT; indexParam: UINT; OUT pCustData: CUSTDATA):HResult;StdCall;
+     Function  GetAllVarCustData(index: UINT; OUT pCustData: CUSTDATA):HResult;StdCall;
+     Function  GetAllImplTypeCustData(index: UINT; OUT pCustData: CUSTDATA):HResult;StdCall;
+     End;
+
+   ITypeLib = Interface (IUnknown)
+     ['{00020402-0000-0000-C000-000000000046}']
+     {$ifndef Call_as}
+      Function GetTypeInfoCount:UINT; StdCall;
+     {$else}
+      Function GetTypeInfoCount(OUT pcTInfo: UINT):HResult;StdCall;
+     {$endif}
+     Function  GetTypeInfo(index: UINT; OUT ppTInfo: ITypeInfo):HResult;StdCall;
+     Function  GetTypeInfoType(index: UINT; OUT pTKind: TYPEKIND):HResult;StdCall;
+     Function  GetTypeInfoOfGuid(CONST guid: TGUID; OUT ppTinfo: ITypeInfo):HResult;StdCall;
+     {$ifndef Call_as}
+     Function  GetLibAttr(OUT ppTLibAttr: lpTLIBATTR):HResult;StdCall;
+     {$else}
+     Function  GetLibAttr(OUT ppTLibAttr: LPTLIBATTR; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
+     {$endif}
+
+     Function  GetTypeComp(OUT ppTComp: ITypeComp):HResult;StdCall;
+     {$ifndef Call_as}
+     Function  GetDocumentation(index: INT; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+     {$else}
+     Function  GetDocumentation(index: INT; refPtrFlags: DWORD; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+     {$endif}
+
+     {$ifndef Call_as}
+     Function  IsName(szNameBuf: pOleStr; lHashVal: ULONG; OUT pfName: BOOL):HResult;StdCall;
+     {$else}
+     Function  IsName(szNameBuf: pOleStr; lHashVal: ULONG; OUT pfName: BOOL; OUT pBstrLibName: WideString):HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+     Function  FindName(szNameBuf: pOleStr; lHashVal: ULONG; OUT ppTInfo: ITypeInfo; OUT rgMemId: MEMBERID; VAR pcFound: USHORT):HResult;StdCall;
+     {$else}
+     Function  FindName(szNameBuf: pOleStr; lHashVal: ULONG; OUT ppTInfo: ITypeInfo; OUT rgMemId: MEMBERID; VAR pcFound: USHORT; OUT pBstrLibName: WideString):HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+      Procedure ReleaseTLibAttr(Const pTLibAttr : TLIBATTR); StdCall;
+      {$else}
+     Function  LocalReleaseTLibAttr:HResult;StdCall;
+     {$endif}
+     End;
+
+   ITypeLib2 = Interface (ITypeLib)
+     ['{00020411-0000-0000-C000-000000000046}']
+     Function  GetCustData(CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     {$ifndef Call_as}
+     Function  GetLibStatistics(OUT pcUniqueNames: ULONG; OUT pcchUniqueNames: ULONG):HResult;StdCall;
+     {$else}
+     Function  GetLibStatistics(OUT pcUniqueNames: ULONG; OUT pcchUniqueNames: ULONG):HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+     Function  GetDocumentation2(index: INT; lcid: LCID; OUT pbstrHelpString: WideString; OUT pdwHelpStringContext: DWORD; OUT pbstrHelpStringDll: WideString):HResult;StdCall;
+     {$else}
+     Function  GetDocumentation2(index: INT; lcid: LCID; refPtrFlags: DWORD; OUT pbstrHelpString: WideString; OUT pdwHelpStringContext: DWORD; OUT pbstrHelpStringDll: WideString):HResult;StdCall;
+     {$endif}
+     Function  GetAllCustData(OUT pCustData: CUSTDATA):HResult;StdCall;
+     End;
+
+   ITypeChangeEvents= Interface (IUnknown)
+     ['{00020410-0000-0000-C000-000000000046}']
+     Function  RequestTypeChange(changeKind: CHANGEKIND; CONST pTInfoBefore: ITypeInfo; pStrName: pOleStr; OUT pfCancel: INT):HResult;StdCall;
+     Function  AfterTypeChange(changeKind: CHANGEKIND; CONST pTInfoAfter: ITypeInfo; pStrName: pOleStr):HResult;StdCall;
+     End;
+
+   IErrorInfo= Interface (IUnknown)
+     ['{1CF2B120-547D-101B-8E65-08002B2BD119}']
+     Function  GetGUID(OUT pGUID: TGUID):HResult;StdCall;
+     Function  GetSource(OUT pBstrSource: WideString):HResult;StdCall;
+     Function  GetDescription(OUT pBstrDescription: WideString):HResult;StdCall;
+     Function  GetHelpFile(OUT pBstrHelpFile: WideString):HResult;StdCall;
+     Function  GetHelpContext(OUT pdwHelpContext: DWORD):HResult;StdCall;
+     End;
+
+   ICreateErrorInfo= Interface (IUnknown)
+     ['{22F03340-547D-101B-8E65-08002B2BD119}']
+     Function  SetGUID(CONST rguid: TGUID):HResult;StdCall;
+     Function  SetSource(szSource: pOleStr):HResult;StdCall;
+     Function  SetDescription(szDescription: pOleStr):HResult;StdCall;
+     Function  SetHelpFile(szHelpFile: pOleStr):HResult;StdCall;
+     Function  SetHelpContext(dwHelpContext: DWORD):HResult;StdCall;
+     End;
+
+   ISupportErrorInfo= Interface (IUnknown)
+     ['{DF0B3D60-548F-101B-8E65-08002B2BD119}']
+     Function  InterfaceSupportsErrorInfo(CONST riid: TIID):HResult;StdCall;
+     End;
+
+   ITypeFactory = Interface (IUnknown)
+     ['{0000002E-0000-0000-C000-000000000046}']
+     Function  CreateFromTypeInfo(CONST pTypeInfo: ITypeInfo; CONST riid: TIID; OUT ppv: IUnknown):HResult;StdCall;
+     End;
+
+   ITypeMarshal = Interface (IUnknown)
+     ['{0000002D-0000-0000-C000-000000000046}']
+     Function  Size(pvType: Pointer; dwDestContext: DWORD; pvDestContext: Pointer; OUT pSize: ULONG):HResult;StdCall;
+     Function  Marshal(pvType: Pointer; dwDestContext: DWORD; pvDestContext: Pointer; cbBufferLength: ULONG; OUT pBuffer: BYTE; OUT pcbWritten: ULONG):HResult;StdCall;
+     Function  Unmarshal(pvType: Pointer; dwFlags: DWORD; cbBufferLength: ULONG; CONST pBuffer: BYTE; OUT pcbRead: ULONG):HResult;StdCall;
+     Function  Free(pvType: Pointer):HResult;StdCall;
+     End;
+
+   IRecordInfo = Interface(IUnknown)
+     ['{0000002F-0000-0000-C000-000000000046}']
+     Function  RecordInit(pvNew: Pointer):HResult;StdCall;
+     Function  RecordClear(pvExisting: Pointer):HResult;StdCall;
+     Function  RecordCopy(pvExisting: Pointer; pvNew: Pointer):HResult;StdCall;
+     Function  GetGuid(OUT pguid: TGUID):HResult;StdCall;
+     Function  GetName(OUT pbstrName: WideString):HResult;StdCall;
+     Function  GetSize(OUT pcbSize: ULONG):HResult;StdCall;
+     Function  GetTypeInfo(OUT ppTypeInfo: ITypeInfo):HResult;StdCall;
+     Function  GetField(pvData: Pointer; szFieldName: pOleStr; OUT pvarField: VARIANT):HResult;StdCall;
+     Function  GetFieldNoCopy(pvData: Pointer; szFieldName: pOleStr; OUT pvarField: VARIANT; OUT ppvDataCArray: Pointer):HResult;StdCall;
+     Function  PutField(wFlags: ULONG; pvData: Pointer; szFieldName: pOleStr; CONST pvarField: VARIANT):HResult;StdCall;
+     Function  PutFieldNoCopy(wFlags: ULONG; pvData: Pointer; szFieldName: pOleStr; CONST pvarField: VARIANT):HResult;StdCall;
+     Function  GetFieldNames(VAR pcNames: ULONG; OUT rgBstrNames: WideString):HResult;StdCall;
+     Function  IsMatchingType(CONST pRecordInfo : IRecordInfo):Bool;StdCall;
+     Function  RecordCreate : Pointer; StdCall;
+     Function  RecordCreateCopy(pvSource: Pointer; OUT ppvDest: Pointer):HResult;StdCall;
+     Function  RecordDestroy(pvRecord: Pointer):HResult;StdCall;
+     End;
+
+   IErrorLog = Interface (IUnknown)
+     ['{3127CA40-446E-11CE-8135-00AA004BB851}']
+     Function  AddError(pszPropName: pOleStr; CONST pExcepInfo: EXCEPINFO):HResult;StdCall;
+     End;
+
+
+   IPropertyBag = Interface (IUnknown)
+     ['{55272A00-42CB-11CE-8135-00AA004BB851}']
+     {$ifndef Call_as}
+      Function  Read(pszPropName: pOleStr; VAR pVar: VARIANT; CONST pErrorLog: IErrorLog):HResult;StdCall;
+     {$else}
+      Function  Read(pszPropName: pOleStr; OUT pVar: VARIANT; CONST pErrorLog: IErrorLog; varType: DWORD; CONST pUnkObj: IUnknown):HResult;StdCall;
+     {$endif}
+     Function  Write(pszPropName: pOleStr; CONST pVar: VARIANT):HResult;StdCall;
+     End;
+
+{$ENDIF}
+
 implementation
 end.
 
 {
   $Log$
-  Revision 1.2  2002-02-26 10:30:01  marco
+  Revision 1.3  2002-02-28 13:52:59  marco
+   * has_intf and oaidl
+
+  Revision 1.2  2002/02/26 10:30:01  marco
    * Merged objidl.idl translation. Most of wtypes.idl also included. Size slightly 	increased.
 
   Revision 1.1  2001/08/19 21:02:02  florian