home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / oaidl.idl < prev    next >
Text File  |  1998-04-25  |  58KB  |  1,948 lines

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright 1992 - 1998 Microsoft Corporation.
  5. //
  6. //  File: oaidl.idl
  7. //
  8. //----------------------------------------------------------------------------
  9.  
  10. cpp_quote("//+-------------------------------------------------------------------------")
  11. cpp_quote("//")
  12. cpp_quote("//  Microsoft Windows")
  13. cpp_quote("//  Copyright 1992 - 1998 Microsoft Corporation.")
  14. cpp_quote("//")
  15. cpp_quote("//--------------------------------------------------------------------------")
  16.  
  17. cpp_quote("#if ( _MSC_VER >= 800 )")
  18. cpp_quote("#pragma warning(disable:4201)    /* Nameless struct/union */")
  19. cpp_quote("#endif")
  20.  
  21. #ifndef DO_NO_IMPORTS
  22. import "objidl.idl";
  23. #endif
  24.  
  25. interface ICreateTypeInfo;
  26. interface ICreateTypeInfo2;
  27. interface ICreateTypeLib;
  28. interface ICreateTypeLib2;
  29. interface IDispatch;
  30. interface IEnumVARIANT;
  31. interface ITypeComp;
  32. interface ITypeInfo;
  33. interface ITypeInfo2;
  34. interface ITypeLib;
  35. interface ITypeLib2;
  36. interface ITypeChangeEvents;
  37. interface IErrorInfo;
  38. interface ICreateErrorInfo;
  39. interface ISupportErrorInfo;
  40. interface ITypeFactory;
  41. interface ITypeMarshal;
  42. interface IRecordInfo;
  43.  
  44.  
  45. [
  46.   version(1.0), pointer_default(unique)
  47. ]
  48.  
  49. interface IOleAutomationTypes
  50. {
  51.  
  52. typedef CY CURRENCY;
  53.  
  54. // #########################################################################
  55. //      SAFEARRAY
  56. // #########################################################################
  57.  
  58. typedef struct tagSAFEARRAYBOUND {
  59.     ULONG cElements;
  60.     LONG  lLbound;
  61. } SAFEARRAYBOUND, * LPSAFEARRAYBOUND;
  62.  
  63. cpp_quote("/* the following is what MIDL knows how to remote */")
  64.  
  65. // Forward references.
  66. typedef [unique] struct _wireVARIANT * wireVARIANT;
  67. typedef [unique] struct _wireBRECORD * wireBRECORD;
  68.  
  69. typedef struct _wireSAFEARR_BSTR {
  70.     ULONG Size;
  71.     [size_is(Size), ref] wireBSTR * aBstr;
  72. } SAFEARR_BSTR;
  73.  
  74. typedef struct _wireSAFEARR_UNKNOWN {
  75.     ULONG Size;
  76.     [size_is(Size), ref] IUnknown ** apUnknown;
  77. } SAFEARR_UNKNOWN;
  78.  
  79. typedef struct _wireSAFEARR_DISPATCH {
  80.     ULONG Size;
  81.     [size_is(Size), ref] IDispatch ** apDispatch;
  82. } SAFEARR_DISPATCH;
  83.  
  84. typedef struct _wireSAFEARR_VARIANT {
  85.     ULONG Size;
  86.     [size_is(Size), ref] wireVARIANT * aVariant;
  87. } SAFEARR_VARIANT;
  88.  
  89. typedef struct _wireSAFEARR_BRECORD {
  90.     ULONG Size;
  91.     [size_is(Size), ref] wireBRECORD * aRecord;
  92. } SAFEARR_BRECORD;
  93.  
  94. typedef struct _wireSAFEARR_HAVEIID {
  95.     ULONG Size;
  96.     [size_is(Size), ref] IUnknown ** apUnknown;
  97.     IID   iid;
  98. } SAFEARR_HAVEIID;
  99.  
  100. typedef [v1_enum] enum tagSF_TYPE {
  101.     SF_ERROR    = VT_ERROR,
  102.     SF_I1       = VT_I1,
  103.     SF_I2       = VT_I2,
  104.     SF_I4       = VT_I4,
  105.     SF_I8       = VT_I8,
  106.     SF_BSTR     = VT_BSTR,
  107.     SF_UNKNOWN  = VT_UNKNOWN,
  108.     SF_DISPATCH = VT_DISPATCH,
  109.     SF_VARIANT  = VT_VARIANT,
  110.     SF_RECORD   = VT_RECORD,
  111.     SF_HAVEIID  = VT_UNKNOWN|VT_RESERVED,
  112. } SF_TYPE;
  113.  
  114. typedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u {
  115.     case SF_BSTR:      SAFEARR_BSTR     BstrStr;
  116.     case SF_UNKNOWN:   SAFEARR_UNKNOWN  UnknownStr;
  117.     case SF_DISPATCH:  SAFEARR_DISPATCH DispatchStr;
  118.     case SF_VARIANT:   SAFEARR_VARIANT  VariantStr;
  119.     case SF_RECORD:    SAFEARR_BRECORD  RecordStr;
  120.     case SF_HAVEIID:   SAFEARR_HAVEIID  HaveIidStr;
  121.     case SF_I1:        BYTE_SIZEDARR    ByteStr;
  122.     case SF_I2:        WORD_SIZEDARR    WordStr;
  123.     case SF_I4:        DWORD_SIZEDARR   LongStr;
  124.     case SF_I8:        HYPER_SIZEDARR   HyperStr;
  125. } SAFEARRAYUNION;
  126.  
  127. typedef [unique] struct _wireSAFEARRAY {
  128.     USHORT cDims;
  129.     USHORT fFeatures;
  130.     ULONG  cbElements;
  131.     ULONG  cLocks;
  132.     SAFEARRAYUNION uArrayStructs;
  133.     [size_is(cDims)] SAFEARRAYBOUND rgsabound[];
  134. } * wireSAFEARRAY;
  135.  
  136. typedef [unique] wireSAFEARRAY * wirePSAFEARRAY;
  137.  
  138.  
  139. typedef struct tagSAFEARRAY {
  140.     USHORT cDims;
  141.     USHORT fFeatures;
  142.     ULONG  cbElements;
  143.     ULONG  cLocks;
  144.     PVOID  pvData;
  145.     SAFEARRAYBOUND rgsabound[];
  146. } SAFEARRAY;
  147.  
  148. typedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY * LPSAFEARRAY;
  149.  
  150. const USHORT FADF_AUTO       = 0x0001;  /* array is allocated on the stack */
  151. const USHORT FADF_STATIC     = 0x0002;  /* array is staticly allocated */
  152. const USHORT FADF_EMBEDDED   = 0x0004;  /* array is embedded in a structure */
  153. const USHORT FADF_FIXEDSIZE  = 0x0010;  /* may not be resized or reallocated */
  154. const USHORT FADF_RECORD     = 0x0020;  /* an array of records */
  155. const USHORT FADF_HAVEIID    = 0x0040;  /* with FADF_DISPATCH, FADF_UNKNOWN */
  156.                                         /* array has an IID for interfaces */
  157. const USHORT FADF_HAVEVARTYPE= 0x0080;  /* array has a VT type */
  158. const USHORT FADF_BSTR       = 0x0100;  /* an array of BSTRs */
  159. const USHORT FADF_UNKNOWN    = 0x0200;  /* an array of IUnknown* */
  160. const USHORT FADF_DISPATCH   = 0x0400;  /* an array of IDispatch* */
  161. const USHORT FADF_VARIANT    = 0x0800;  /* an array of VARIANTs */
  162. const USHORT FADF_RESERVED   = 0xF008;  /* reserved bits */
  163.  
  164.  
  165. // #########################################################################
  166. //      VARIANT
  167. // #########################################################################
  168.  
  169. cpp_quote("/* VARIANT STRUCTURE")
  170. cpp_quote(" *")
  171. cpp_quote(" *  VARTYPE vt;")
  172. cpp_quote(" *  WORD wReserved1;")
  173. cpp_quote(" *  WORD wReserved2;")
  174. cpp_quote(" *  WORD wReserved3;")
  175. cpp_quote(" *  union {")
  176. cpp_quote(" *    LONG           VT_I4")
  177. cpp_quote(" *    BYTE           VT_UI1")
  178. cpp_quote(" *    SHORT          VT_I2")
  179. cpp_quote(" *    FLOAT          VT_R4")
  180. cpp_quote(" *    DOUBLE         VT_R8")
  181. cpp_quote(" *    VARIANT_BOOL   VT_BOOL")
  182. cpp_quote(" *    SCODE          VT_ERROR")
  183. cpp_quote(" *    CY             VT_CY")
  184. cpp_quote(" *    DATE           VT_DATE")
  185. cpp_quote(" *    BSTR           VT_BSTR")
  186. cpp_quote(" *    IUnknown *     VT_UNKNOWN")
  187. cpp_quote(" *    IDispatch *    VT_DISPATCH")
  188. cpp_quote(" *    SAFEARRAY *    VT_ARRAY")
  189. cpp_quote(" *    BYTE *         VT_BYREF|VT_UI1")
  190. cpp_quote(" *    SHORT *        VT_BYREF|VT_I2")
  191. cpp_quote(" *    LONG *         VT_BYREF|VT_I4")
  192. cpp_quote(" *    FLOAT *        VT_BYREF|VT_R4")
  193. cpp_quote(" *    DOUBLE *       VT_BYREF|VT_R8")
  194. cpp_quote(" *    VARIANT_BOOL * VT_BYREF|VT_BOOL")
  195. cpp_quote(" *    SCODE *        VT_BYREF|VT_ERROR")
  196. cpp_quote(" *    CY *           VT_BYREF|VT_CY")
  197. cpp_quote(" *    DATE *         VT_BYREF|VT_DATE")
  198. cpp_quote(" *    BSTR *         VT_BYREF|VT_BSTR")
  199. cpp_quote(" *    IUnknown **    VT_BYREF|VT_UNKNOWN")
  200. cpp_quote(" *    IDispatch **   VT_BYREF|VT_DISPATCH")
  201. cpp_quote(" *    SAFEARRAY **   VT_BYREF|VT_ARRAY")
  202. cpp_quote(" *    VARIANT *      VT_BYREF|VT_VARIANT")
  203. cpp_quote(" *    PVOID          VT_BYREF (Generic ByRef)")
  204. cpp_quote(" *    CHAR           VT_I1")
  205. cpp_quote(" *    USHORT         VT_UI2")
  206. cpp_quote(" *    ULONG          VT_UI4")
  207. cpp_quote(" *    INT            VT_INT")
  208. cpp_quote(" *    UINT           VT_UINT")
  209. cpp_quote(" *    DECIMAL *      VT_BYREF|VT_DECIMAL")
  210. cpp_quote(" *    CHAR *         VT_BYREF|VT_I1")
  211. cpp_quote(" *    USHORT *       VT_BYREF|VT_UI2")
  212. cpp_quote(" *    ULONG *        VT_BYREF|VT_UI4")
  213. cpp_quote(" *    INT *          VT_BYREF|VT_INT")
  214. cpp_quote(" *    UINT *         VT_BYREF|VT_UINT")
  215. cpp_quote(" *  }")
  216. cpp_quote(" */")
  217.  
  218. cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)")
  219. cpp_quote("#define __VARIANT_NAME_1 n1")
  220. cpp_quote("#define __VARIANT_NAME_2 n2")
  221. cpp_quote("#define __VARIANT_NAME_3 n3")
  222. cpp_quote("#define __VARIANT_NAME_4 brecVal")
  223. cpp_quote("#else")
  224. cpp_quote("#define __tagVARIANT")
  225. cpp_quote("#define __VARIANT_NAME_1")
  226. cpp_quote("#define __VARIANT_NAME_2")
  227. cpp_quote("#define __VARIANT_NAME_3")
  228. cpp_quote("#define __tagBRECORD")
  229. cpp_quote("#define __VARIANT_NAME_4")
  230. cpp_quote("#endif")
  231.  
  232. typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;
  233.  
  234. struct tagVARIANT {
  235.     union {
  236.         struct __tagVARIANT {
  237.             VARTYPE vt;
  238.             WORD    wReserved1;
  239.             WORD    wReserved2;
  240.             WORD    wReserved3;
  241.             union {
  242.                 LONG          lVal;         /* VT_I4                */
  243.                 BYTE          bVal;         /* VT_UI1               */
  244.                 SHORT         iVal;         /* VT_I2                */
  245.                 FLOAT         fltVal;       /* VT_R4                */
  246.                 DOUBLE        dblVal;       /* VT_R8                */
  247.                 VARIANT_BOOL  boolVal;      /* VT_BOOL              */
  248.                 _VARIANT_BOOL bool;         /* (obsolete)           */
  249.                 SCODE         scode;        /* VT_ERROR             */
  250.                 CY            cyVal;        /* VT_CY                */
  251.                 DATE          date;         /* VT_DATE              */
  252.                 BSTR          bstrVal;      /* VT_BSTR              */
  253.                 IUnknown *    punkVal;      /* VT_UNKNOWN           */
  254.                 IDispatch *   pdispVal;     /* VT_DISPATCH          */
  255.                 SAFEARRAY *   parray;       /* VT_ARRAY             */
  256.                 BYTE *        pbVal;        /* VT_BYREF|VT_UI1      */
  257.                 SHORT *       piVal;        /* VT_BYREF|VT_I2       */
  258.                 LONG *        plVal;        /* VT_BYREF|VT_I4       */
  259.                 FLOAT *       pfltVal;      /* VT_BYREF|VT_R4       */
  260.                 DOUBLE *      pdblVal;      /* VT_BYREF|VT_R8       */
  261.                 VARIANT_BOOL *pboolVal;     /* VT_BYREF|VT_BOOL     */
  262.                 _VARIANT_BOOL *pbool;       /* (obsolete)           */
  263.                 SCODE *       pscode;       /* VT_BYREF|VT_ERROR    */
  264.                 CY *          pcyVal;       /* VT_BYREF|VT_CY       */
  265.                 DATE *        pdate;        /* VT_BYREF|VT_DATE     */
  266.                 BSTR *        pbstrVal;     /* VT_BYREF|VT_BSTR     */
  267.                 IUnknown **   ppunkVal;     /* VT_BYREF|VT_UNKNOWN  */
  268.                 IDispatch **  ppdispVal;    /* VT_BYREF|VT_DISPATCH */
  269.                 SAFEARRAY **  pparray;      /* VT_BYREF|VT_ARRAY    */
  270.                 VARIANT *     pvarVal;      /* VT_BYREF|VT_VARIANT  */
  271.                 PVOID         byref;        /* Generic ByRef        */
  272.                 CHAR          cVal;         /* VT_I1                */
  273.                 USHORT        uiVal;        /* VT_UI2               */
  274.                 ULONG         ulVal;        /* VT_UI4               */
  275.                 INT           intVal;       /* VT_INT               */
  276.                 UINT          uintVal;      /* VT_UINT              */
  277.                 DECIMAL *     pdecVal;      /* VT_BYREF|VT_DECIMAL  */
  278.                 CHAR *        pcVal;        /* VT_BYREF|VT_I1       */
  279.                 USHORT *      puiVal;       /* VT_BYREF|VT_UI2      */
  280.                 ULONG *       pulVal;       /* VT_BYREF|VT_UI4      */
  281.                 INT *         pintVal;      /* VT_BYREF|VT_INT      */
  282.                 UINT *        puintVal;     /* VT_BYREF|VT_UINT     */
  283.                 struct __tagBRECORD {
  284.                     PVOID         pvRecord;
  285.                     IRecordInfo * pRecInfo;
  286.                 } __VARIANT_NAME_4;         /* VT_RECORD            */
  287.             } __VARIANT_NAME_3;
  288.         } __VARIANT_NAME_2;
  289.  
  290.         DECIMAL decVal;
  291.     } __VARIANT_NAME_1;
  292. };
  293.  
  294. typedef VARIANT * LPVARIANT;
  295. typedef VARIANT VARIANTARG;
  296. typedef VARIANT * LPVARIANTARG;
  297.  
  298. cpp_quote("/* the following is what MIDL knows how to remote */")
  299.  
  300. struct _wireBRECORD {
  301.     ULONG fFlags;
  302.     ULONG clSize;
  303.     IRecordInfo * pRecInfo;
  304.     [size_is(clSize)] byte * pRecord;
  305. };
  306.  
  307. struct _wireVARIANT {
  308.     DWORD  clSize;          /* wire buffer length in units of hyper (int64) */
  309.     DWORD  rpcReserved;     /* for future use */
  310.     USHORT vt;
  311.     USHORT wReserved1;
  312.     USHORT wReserved2;
  313.     USHORT wReserved3;
  314.     [switch_type(ULONG), switch_is(vt)] union {
  315.     [case(VT_I4)]       LONG          lVal;         /* VT_I4                */
  316.     [case(VT_UI1)]      BYTE          bVal;         /* VT_UI1               */
  317.     [case(VT_I2)]       SHORT         iVal;         /* VT_I2                */
  318.     [case(VT_R4)]       FLOAT         fltVal;       /* VT_R4                */
  319.     [case(VT_R8)]       DOUBLE        dblVal;       /* VT_R8                */
  320.     [case(VT_BOOL)]     VARIANT_BOOL  boolVal;      /* VT_BOOL              */
  321.     [case(VT_ERROR)]    SCODE         scode;        /* VT_ERROR             */
  322.     [case(VT_CY)]       CY            cyVal;        /* VT_CY                */
  323.     [case(VT_DATE)]     DATE          date;         /* VT_DATE              */
  324.     [case(VT_BSTR)]     wireBSTR      bstrVal;      /* VT_BSTR              */
  325.     [case(VT_UNKNOWN)]  IUnknown *    punkVal;      /* VT_UNKNOWN           */
  326.     [case(VT_DISPATCH)] IDispatch *   pdispVal;     /* VT_DISPATCH          */
  327.     [case(VT_ARRAY)]    wireSAFEARRAY parray;       /* VT_ARRAY             */
  328.  
  329.     [case(VT_RECORD, VT_RECORD|VT_BYREF)]
  330.                         wireBRECORD   brecVal;      /* VT_RECORD            */
  331.  
  332.     [case(VT_UI1|VT_BYREF)]
  333.                         BYTE *        pbVal;        /* VT_BYREF|VT_UI1      */
  334.     [case(VT_I2|VT_BYREF)]
  335.                         SHORT *       piVal;        /* VT_BYREF|VT_I2       */
  336.     [case(VT_I4|VT_BYREF)]
  337.                         LONG *        plVal;        /* VT_BYREF|VT_I4       */
  338.     [case(VT_R4|VT_BYREF)]
  339.                         FLOAT *       pfltVal;      /* VT_BYREF|VT_R4       */
  340.     [case(VT_R8|VT_BYREF)]
  341.                         DOUBLE *      pdblVal;      /* VT_BYREF|VT_R8       */
  342.     [case(VT_BOOL|VT_BYREF)]
  343.                         VARIANT_BOOL *pboolVal;     /* VT_BYREF|VT_BOOL     */
  344.     [case(VT_ERROR|VT_BYREF)]
  345.                         SCODE *       pscode;       /* VT_BYREF|VT_ERROR    */
  346.     [case(VT_CY|VT_BYREF)]
  347.                         CY *          pcyVal;       /* VT_BYREF|VT_CY       */
  348.     [case(VT_DATE|VT_BYREF)]
  349.                         DATE *        pdate;        /* VT_BYREF|VT_DATE     */
  350.     [case(VT_BSTR|VT_BYREF)]
  351.                         wireBSTR *    pbstrVal;     /* VT_BYREF|VT_BSTR     */
  352.     [case(VT_UNKNOWN|VT_BYREF)]
  353.                         IUnknown **   ppunkVal;     /* VT_BYREF|VT_UNKNOWN  */
  354.     [case(VT_DISPATCH|VT_BYREF)]
  355.                         IDispatch **  ppdispVal;    /* VT_BYREF|VT_DISPATCH */
  356.     [case(VT_ARRAY|VT_BYREF)]
  357.                         wireSAFEARRAY *pparray;     /* VT_BYREF|VT_ARRAY    */
  358.     [case(VT_VARIANT|VT_BYREF)]
  359.                         wireVARIANT * pvarVal;      /* VT_BYREF|VT_VARIANT  */
  360.  
  361.     [case(VT_I1)]       CHAR          cVal;         /* VT_I1                */
  362.     [case(VT_UI2)]      USHORT        uiVal;        /* VT_UI2               */
  363.     [case(VT_UI4)]      ULONG         ulVal;        /* VT_UI4               */
  364.     [case(VT_INT)]      INT           intVal;       /* VT_INT               */
  365.     [case(VT_UINT)]     UINT          uintVal;      /* VT_UINT              */
  366.     [case(VT_DECIMAL)]  DECIMAL       decVal;       /* VT_DECIMAL           */
  367.  
  368.     [case(VT_BYREF|VT_DECIMAL)]
  369.                         DECIMAL *     pdecVal;      /* VT_BYREF|VT_DECIMAL  */
  370.     [case(VT_BYREF|VT_I1)]
  371.                         CHAR *        pcVal;        /* VT_BYREF|VT_I1       */
  372.     [case(VT_BYREF|VT_UI2)]
  373.                         USHORT *      puiVal;       /* VT_BYREF|VT_UI2      */
  374.     [case(VT_BYREF|VT_UI4)]
  375.                         ULONG *       pulVal;       /* VT_BYREF|VT_UI4      */
  376.     [case(VT_BYREF|VT_INT)]
  377.                         INT *         pintVal;      /* VT_BYREF|VT_INT      */
  378.     [case(VT_BYREF|VT_UINT)]
  379.                         UINT *        puintVal;     /* VT_BYREF|VT_UINT     */
  380.     [case(VT_EMPTY)]    ;                           /* nothing              */
  381.     [case(VT_NULL)]     ;                           /* nothing              */
  382.     };
  383. };
  384.  
  385.  
  386. //########################################################################
  387. //     End of VARIANT & SAFEARRAY
  388. //########################################################################
  389.  
  390.  
  391. //TypeInfo stuff.
  392.  
  393. typedef LONG DISPID;
  394. typedef DISPID MEMBERID;
  395. typedef DWORD HREFTYPE;
  396.  
  397. typedef [v1_enum] enum tagTYPEKIND {
  398.     TKIND_ENUM = 0,
  399.     TKIND_RECORD,
  400.     TKIND_MODULE,
  401.     TKIND_INTERFACE,
  402.     TKIND_DISPATCH,
  403.     TKIND_COCLASS,
  404.     TKIND_ALIAS,
  405.     TKIND_UNION,
  406.     TKIND_MAX                   /* end of enum marker */
  407. } TYPEKIND;
  408.  
  409. typedef struct tagTYPEDESC {
  410.     [switch_type(VARTYPE), switch_is(vt)] union {
  411.         [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC * lptdesc;
  412.         [case(VT_CARRAY)] struct tagARRAYDESC * lpadesc;
  413.         [case(VT_USERDEFINED)] HREFTYPE hreftype;
  414.         [default]   ;
  415.     };
  416.     VARTYPE vt;
  417. } TYPEDESC;
  418.  
  419. typedef struct tagARRAYDESC {
  420.     TYPEDESC tdescElem;         /* element type */
  421.     USHORT cDims;               /* dimension count */
  422.     [size_is(cDims)] SAFEARRAYBOUND rgbounds[]; /* var len array of bounds */
  423. } ARRAYDESC;
  424.  
  425. // parameter description
  426.  
  427. typedef struct tagPARAMDESCEX {
  428.     ULONG cBytes;               /* size of this structure */
  429.     VARIANTARG varDefaultValue; /* default value of this parameter */
  430. } PARAMDESCEX, * LPPARAMDESCEX;
  431.  
  432. typedef struct tagPARAMDESC {
  433.     LPPARAMDESCEX pparamdescex; /* valid if PARAMFLAG_FHASDEFAULT bit is set */
  434.     USHORT wParamFlags;         /* IN, OUT, etc */
  435. } PARAMDESC, * LPPARAMDESC;
  436.  
  437. const USHORT PARAMFLAG_NONE         = 0x00;
  438. const USHORT PARAMFLAG_FIN          = 0x01;
  439. const USHORT PARAMFLAG_FOUT         = 0x02;
  440. const USHORT PARAMFLAG_FLCID        = 0x04;
  441. const USHORT PARAMFLAG_FRETVAL      = 0x08;
  442. const USHORT PARAMFLAG_FOPT         = 0x10;
  443. const USHORT PARAMFLAG_FHASDEFAULT  = 0x20;
  444. const USHORT PARAMFLAG_FHASCUSTDATA = 0x40;
  445.  
  446. typedef struct tagIDLDESC {
  447.     ULONG dwReserved;
  448.     USHORT wIDLFlags;           /* IN, OUT, etc */
  449. } IDLDESC, * LPIDLDESC;
  450.  
  451. const USHORT IDLFLAG_NONE    = PARAMFLAG_NONE;
  452. const USHORT IDLFLAG_FIN     = PARAMFLAG_FIN;
  453. const USHORT IDLFLAG_FOUT    = PARAMFLAG_FOUT;
  454. const USHORT IDLFLAG_FLCID   = PARAMFLAG_FLCID;
  455. const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL;
  456.  
  457. cpp_quote("#if 0")
  458. cpp_quote("/* the following is what MIDL knows how to remote */")
  459.  
  460. typedef struct tagELEMDESC {    /* a format that MIDL likes */
  461.     TYPEDESC tdesc;             /* the type of the element */
  462.     PARAMDESC paramdesc;        /* IDLDESC is a subset of PARAMDESC */
  463. } ELEMDESC;
  464.  
  465. cpp_quote("#else /* 0 */")
  466. cpp_quote("typedef struct tagELEMDESC {")
  467. cpp_quote("    TYPEDESC tdesc;             /* the type of the element */")
  468. cpp_quote("    union {")
  469. cpp_quote("        IDLDESC idldesc;        /* info for remoting the element */")
  470. cpp_quote("        PARAMDESC paramdesc;    /* info about the parameter */")
  471. cpp_quote("    };")
  472. cpp_quote("} ELEMDESC, * LPELEMDESC;")
  473. cpp_quote("#endif /* 0 */")
  474.  
  475. typedef struct tagTYPEATTR {
  476.     GUID guid;                  /* the GUID of the TypeInfo */
  477.     LCID lcid;                  /* locale of member names and doc strings */
  478.     DWORD dwReserved;
  479.     MEMBERID memidConstructor;  /* ID of constructor, MEMBERID_NIL if none */
  480.     MEMBERID memidDestructor;   /* ID of destructor, MEMBERID_NIL if none */
  481.     LPOLESTR lpstrSchema;
  482.     ULONG cbSizeInstance;       /* the size of an instance of this type */
  483.     TYPEKIND typekind;          /* the kind of type this typeinfo describes */
  484.     WORD cFuncs;                /* number of functions */
  485.     WORD cVars;                 /* number of variables / data members */
  486.     WORD cImplTypes;            /* number of implemented interfaces */
  487.     WORD cbSizeVft;             /* the size of this types virtual func table */
  488.     WORD cbAlignment;           /* specifies the alignment requirements for
  489.                                    an instance of this type,
  490.                                    0 = align on 64k boundary
  491.                                    1 = byte align
  492.                                    2 = word align
  493.                                    4 = dword align... */
  494.     WORD wTypeFlags;
  495.     WORD wMajorVerNum;          /* major version number */
  496.     WORD wMinorVerNum;          /* minor version number */
  497.     TYPEDESC tdescAlias;        /* if typekind == TKIND_ALIAS this field
  498.                                    specifies the type for which this type
  499.                                    is an alias */
  500.     IDLDESC idldescType;        /* IDL attributes of the described type */
  501. } TYPEATTR, * LPTYPEATTR;
  502.  
  503. typedef struct tagDISPPARAMS {
  504.     [size_is(cArgs)] VARIANTARG * rgvarg;
  505.     [size_is(cNamedArgs)] DISPID * rgdispidNamedArgs;
  506.     UINT cArgs;
  507.     UINT cNamedArgs;
  508. } DISPPARAMS;
  509.  
  510. cpp_quote("#if 0")
  511. cpp_quote("/* the following is what MIDL knows how to remote */")
  512.  
  513. typedef struct tagEXCEPINFO {
  514.     WORD  wCode;            /* An error code describing the error. */
  515.     WORD  wReserved;
  516.     BSTR  bstrSource;       /* A source of the exception */
  517.     BSTR  bstrDescription;  /* A description of the error */
  518.     BSTR  bstrHelpFile;     /* Fully qualified drive, path, and file name */
  519.     DWORD dwHelpContext;    /* help context of topic within the help file */
  520.     ULONG pvReserved;
  521.     ULONG pfnDeferredFillIn;
  522.     SCODE scode;
  523. } EXCEPINFO;
  524.  
  525. cpp_quote("#else /* 0 */")
  526. cpp_quote("typedef struct tagEXCEPINFO {")
  527. cpp_quote("    WORD  wCode;")
  528. cpp_quote("    WORD  wReserved;")
  529. cpp_quote("    BSTR  bstrSource;")
  530. cpp_quote("    BSTR  bstrDescription;")
  531. cpp_quote("    BSTR  bstrHelpFile;")
  532. cpp_quote("    DWORD dwHelpContext;")
  533. cpp_quote("    PVOID pvReserved;")
  534. cpp_quote("    HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);")
  535. cpp_quote("    SCODE scode;")
  536. cpp_quote("} EXCEPINFO, * LPEXCEPINFO;")
  537. cpp_quote("#endif /* 0 */")
  538.  
  539. typedef [v1_enum] enum tagCALLCONV {
  540.     CC_FASTCALL = 0,
  541.     CC_CDECL = 1,
  542.     CC_MSCPASCAL,
  543.     CC_PASCAL = CC_MSCPASCAL,
  544.     CC_MACPASCAL,
  545.     CC_STDCALL,
  546.     CC_FPFASTCALL,
  547.     CC_SYSCALL,
  548.     CC_MPWCDECL,
  549.     CC_MPWPASCAL,
  550.     CC_MAX          /* end of enum marker */
  551. } CALLCONV;
  552.  
  553. typedef [v1_enum] enum tagFUNCKIND {
  554.     FUNC_VIRTUAL,
  555.     FUNC_PUREVIRTUAL,
  556.     FUNC_NONVIRTUAL,
  557.     FUNC_STATIC,
  558.     FUNC_DISPATCH
  559. } FUNCKIND;
  560.  
  561. typedef [v1_enum] enum tagINVOKEKIND {
  562.     INVOKE_FUNC = 1,
  563.     INVOKE_PROPERTYGET = 2,
  564.     INVOKE_PROPERTYPUT = 4,
  565.     INVOKE_PROPERTYPUTREF = 8
  566. } INVOKEKIND;
  567.  
  568. typedef struct tagFUNCDESC {
  569.     MEMBERID memid;
  570.     [size_is(cScodes)] SCODE * lprgscode;
  571.     [size_is(cParams)] ELEMDESC * lprgelemdescParam; /* array of param types */
  572.     FUNCKIND funckind;
  573.     INVOKEKIND invkind;
  574.     CALLCONV callconv;
  575.     SHORT cParams;
  576.     SHORT cParamsOpt;
  577.     SHORT oVft;
  578.     SHORT cScodes;
  579.     ELEMDESC elemdescFunc;
  580.     WORD wFuncFlags;
  581. } FUNCDESC, * LPFUNCDESC;
  582.  
  583. typedef [v1_enum] enum tagVARKIND {
  584.     VAR_PERINSTANCE,
  585.     VAR_STATIC,
  586.     VAR_CONST,
  587.     VAR_DISPATCH
  588. } VARKIND;
  589.  
  590. /* IMPLTYPE Flags */
  591. const USHORT IMPLTYPEFLAG_FDEFAULT      = 0x1;
  592. const USHORT IMPLTYPEFLAG_FSOURCE       = 0x2;
  593. const USHORT IMPLTYPEFLAG_FRESTRICTED   = 0x4;
  594. const USHORT IMPLTYPEFLAG_FDEFAULTVTABLE= 0x8;
  595.  
  596. typedef struct tagVARDESC {
  597.     MEMBERID memid;
  598.     LPOLESTR lpstrSchema;
  599.     [switch_type(VARKIND), switch_is(varkind)] union {
  600.         /* offset of variable within the instance */
  601.         [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst;
  602.         [case(VAR_CONST)] VARIANT * lpvarValue; /* the value of the constant */
  603.     };
  604.     ELEMDESC elemdescVar;
  605.     WORD     wVarFlags;
  606.     VARKIND  varkind;
  607. } VARDESC, * LPVARDESC;
  608.  
  609. typedef enum tagTYPEFLAGS {
  610.     TYPEFLAG_FAPPOBJECT = 0x01,
  611.     TYPEFLAG_FCANCREATE = 0x02,
  612.     TYPEFLAG_FLICENSED = 0x04,
  613.     TYPEFLAG_FPREDECLID = 0x08,
  614.     TYPEFLAG_FHIDDEN = 0x10,
  615.     TYPEFLAG_FCONTROL = 0x20,
  616.     TYPEFLAG_FDUAL = 0x40,
  617.     TYPEFLAG_FNONEXTENSIBLE = 0x80,
  618.     TYPEFLAG_FOLEAUTOMATION = 0x100,
  619.     TYPEFLAG_FRESTRICTED = 0x200,
  620.     TYPEFLAG_FAGGREGATABLE = 0x400,
  621.     TYPEFLAG_FREPLACEABLE = 0x800,
  622.     TYPEFLAG_FDISPATCHABLE = 0x1000,
  623.     TYPEFLAG_FREVERSEBIND = 0x2000
  624. } TYPEFLAGS;
  625.  
  626. typedef enum tagFUNCFLAGS {
  627.     FUNCFLAG_FRESTRICTED = 0x1,
  628.     FUNCFLAG_FSOURCE = 0x2,
  629.     FUNCFLAG_FBINDABLE = 0x4,
  630.     FUNCFLAG_FREQUESTEDIT = 0x8,
  631.     FUNCFLAG_FDISPLAYBIND = 0x10,
  632.     FUNCFLAG_FDEFAULTBIND = 0x20,
  633.     FUNCFLAG_FHIDDEN = 0x40,
  634.     FUNCFLAG_FUSESGETLASTERROR = 0x80,
  635.     FUNCFLAG_FDEFAULTCOLLELEM = 0x100,
  636.     FUNCFLAG_FUIDEFAULT = 0x200,
  637.     FUNCFLAG_FNONBROWSABLE = 0x400,
  638.     FUNCFLAG_FREPLACEABLE = 0x800,
  639.     FUNCFLAG_FIMMEDIATEBIND = 0x1000
  640. } FUNCFLAGS;
  641.  
  642. typedef enum tagVARFLAGS {
  643.     VARFLAG_FREADONLY = 0x1,
  644.     VARFLAG_FSOURCE = 0x2,
  645.     VARFLAG_FBINDABLE = 0x4,
  646.     VARFLAG_FREQUESTEDIT = 0x8,
  647.     VARFLAG_FDISPLAYBIND = 0x10,
  648.     VARFLAG_FDEFAULTBIND = 0x20,
  649.     VARFLAG_FHIDDEN = 0x40,
  650.     VARFLAG_FRESTRICTED = 0x80,
  651.     VARFLAG_FDEFAULTCOLLELEM = 0x100,
  652.     VARFLAG_FUIDEFAULT = 0x200,
  653.     VARFLAG_FNONBROWSABLE = 0x400,
  654.     VARFLAG_FREPLACEABLE = 0x800,
  655.     VARFLAG_FIMMEDIATEBIND = 0x1000
  656. } VARFLAGS;
  657.  
  658. typedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE {
  659.     IUnknown * pInterface;      /* interface that is responsible for storage */
  660.     PVOID pStorage;             /* the storage being managed by interface */
  661.     DWORD flags;                /* which interface, what storage */
  662. } CLEANLOCALSTORAGE;
  663.  
  664. typedef struct tagCUSTDATAITEM {
  665.     GUID guid;           /* guid identifying this custom data item */
  666.     VARIANTARG varValue; /* value of this custom data item */
  667. } CUSTDATAITEM, * LPCUSTDATAITEM;
  668.  
  669. typedef struct tagCUSTDATA {
  670.     DWORD cCustData;            /* number of custom data items in rgCustData */
  671.     [size_is(cCustData)] LPCUSTDATAITEM prgCustData;
  672.                                 /* array of custom data items */
  673. } CUSTDATA, * LPCUSTDATA;
  674.  
  675. }
  676.  
  677.  
  678. [
  679.     object,
  680.     uuid(00020405-0000-0000-C000-000000000046),
  681.     pointer_default(unique),
  682.     local
  683. ]
  684.  
  685. interface ICreateTypeInfo: IUnknown
  686. {
  687.     typedef [unique] ICreateTypeInfo * LPCREATETYPEINFO;
  688.  
  689.     HRESULT SetGuid(
  690.                 [in] REFGUID guid
  691.             );
  692.  
  693.     HRESULT SetTypeFlags(
  694.                 [in] UINT uTypeFlags
  695.             );
  696.  
  697.     HRESULT SetDocString(
  698.                 [in] LPOLESTR pStrDoc
  699.             );
  700.  
  701.     HRESULT SetHelpContext(
  702.                 [in] DWORD dwHelpContext
  703.             );
  704.  
  705.     HRESULT SetVersion(
  706.                 [in] WORD wMajorVerNum,
  707.                 [in] WORD wMinorVerNum
  708.             );
  709.  
  710.     HRESULT AddRefTypeInfo(
  711.  
  712.                 [in] ITypeInfo * pTInfo,
  713.                 [in] HREFTYPE * phRefType
  714.             );
  715.  
  716.     HRESULT AddFuncDesc(
  717.                 [in] UINT index,
  718.                 [in] FUNCDESC * pFuncDesc
  719.             );
  720.  
  721.     HRESULT AddImplType(
  722.                 [in] UINT index,
  723.                 [in] HREFTYPE hRefType
  724.             );
  725.  
  726.     HRESULT SetImplTypeFlags(
  727.                 [in] UINT index,
  728.                 [in] INT implTypeFlags
  729.             );
  730.  
  731.     HRESULT SetAlignment(
  732.                 [in] WORD cbAlignment
  733.             );
  734.  
  735.     HRESULT SetSchema(
  736.                 [in] LPOLESTR pStrSchema
  737.             );
  738.  
  739.     HRESULT AddVarDesc(
  740.                 [in] UINT index,
  741.                 [in] VARDESC * pVarDesc
  742.             );
  743.  
  744.     HRESULT SetFuncAndParamNames(
  745.                 [in] UINT index,
  746.                 [in, size_is((UINT) cNames)]
  747.                 [in] LPOLESTR * rgszNames,
  748.                 [in] UINT cNames
  749.             );
  750.  
  751.     HRESULT SetVarName(
  752.                 [in] UINT index,
  753.                 [in] LPOLESTR szName
  754.             );
  755.  
  756.     HRESULT SetTypeDescAlias(
  757.                 [in] TYPEDESC * pTDescAlias
  758.             );
  759.  
  760.     HRESULT DefineFuncAsDllEntry(
  761.                 [in] UINT index,
  762.                 [in] LPOLESTR szDllName,
  763.                 [in] LPOLESTR szProcName
  764.             );
  765.  
  766.     HRESULT SetFuncDocString(
  767.                 [in] UINT index,
  768.                 [in] LPOLESTR szDocString
  769.             );
  770.  
  771.     HRESULT SetVarDocString(
  772.                 [in] UINT index,
  773.                 [in] LPOLESTR szDocString
  774.             );
  775.  
  776.     HRESULT SetFuncHelpContext(
  777.                 [in] UINT index,
  778.                 [in] DWORD dwHelpContext
  779.             );
  780.  
  781.     HRESULT SetVarHelpContext(
  782.                 [in] UINT index,
  783.                 [in] DWORD dwHelpContext
  784.             );
  785.  
  786.     HRESULT SetMops(
  787.                 [in] UINT index,
  788.                 [in] BSTR bstrMops
  789.             );
  790.  
  791.     HRESULT SetTypeIdldesc(
  792.                 [in] IDLDESC * pIdlDesc
  793.             );
  794.  
  795.     HRESULT LayOut(
  796.                 void
  797.             );
  798.  
  799. }
  800.  
  801.  
  802. [
  803.     object,
  804.     uuid(0002040E-0000-0000-C000-000000000046),
  805.     pointer_default(unique),
  806.     local
  807. ]
  808.  
  809. interface ICreateTypeInfo2: ICreateTypeInfo
  810. {
  811.     typedef [unique] ICreateTypeInfo2 * LPCREATETYPEINFO2;
  812.  
  813.     HRESULT DeleteFuncDesc(
  814.                 [in] UINT index
  815.             );
  816.  
  817.     HRESULT DeleteFuncDescByMemId(
  818.                 [in] MEMBERID memid,
  819.                 [in] INVOKEKIND invKind
  820.             );
  821.  
  822.     HRESULT DeleteVarDesc(
  823.                 [in] UINT index
  824.             );
  825.  
  826.     HRESULT DeleteVarDescByMemId(
  827.                 [in] MEMBERID memid
  828.             );
  829.  
  830.     HRESULT DeleteImplType(
  831.                 [in] UINT index
  832.             );
  833.  
  834.     HRESULT SetCustData(
  835.                 [in] REFGUID guid,
  836.                 [in] VARIANT * pVarVal
  837.             );
  838.  
  839.     HRESULT SetFuncCustData( 
  840.                 [in] UINT index, 
  841.                 [in] REFGUID guid, 
  842.                 [in] VARIANT * pVarVal
  843.             );
  844.     
  845.     HRESULT SetParamCustData( 
  846.                 [in] UINT indexFunc, 
  847.                 [in] UINT indexParam, 
  848.                 [in] REFGUID guid, 
  849.                 [in] VARIANT * pVarVal
  850.             );
  851.  
  852.     HRESULT SetVarCustData( 
  853.                 [in] UINT index, 
  854.                 [in] REFGUID guid, 
  855.                 [in] VARIANT * pVarVal
  856.             );
  857.  
  858.     HRESULT SetImplTypeCustData( 
  859.                 [in] UINT index, 
  860.                 [in] REFGUID guid, 
  861.                 [in] VARIANT * pVarVal
  862.             );
  863.  
  864.     HRESULT SetHelpStringContext(
  865.                 [in] ULONG dwHelpStringContext
  866.             );
  867.  
  868.     HRESULT SetFuncHelpStringContext(
  869.                 [in] UINT index,
  870.                 [in] ULONG dwHelpStringContext
  871.             );
  872.  
  873.     HRESULT SetVarHelpStringContext(
  874.                 [in] UINT index,
  875.                 [in] ULONG dwHelpStringContext
  876.             );
  877.  
  878.     HRESULT Invalidate(
  879.                 void
  880.             );
  881.  
  882.     HRESULT SetName(
  883.                 [in]  LPOLESTR szName
  884.             );
  885.  
  886. }
  887.  
  888.  
  889. [
  890.     object,
  891.     uuid(00020406-0000-0000-C000-000000000046),
  892.     pointer_default(unique),
  893.     local
  894. ]
  895.  
  896. interface ICreateTypeLib : IUnknown
  897. {
  898.     typedef [unique] ICreateTypeLib * LPCREATETYPELIB;
  899.  
  900.     HRESULT CreateTypeInfo(
  901.                 [in]  LPOLESTR szName,
  902.                 [in]  TYPEKIND tkind,
  903.                 [out] ICreateTypeInfo ** ppCTInfo
  904.             );
  905.  
  906.     HRESULT SetName(
  907.                 [in]  LPOLESTR szName
  908.             );
  909.  
  910.     HRESULT SetVersion(
  911.                 [in] WORD wMajorVerNum,
  912.                 [in] WORD wMinorVerNum
  913.             );
  914.  
  915.     HRESULT SetGuid(
  916.                 [in] REFGUID guid
  917.             );
  918.  
  919.     HRESULT SetDocString(
  920.                 [in] LPOLESTR szDoc
  921.             );
  922.  
  923.     HRESULT SetHelpFileName(
  924.                 [in] LPOLESTR szHelpFileName
  925.             );
  926.  
  927.     HRESULT SetHelpContext(
  928.                 [in] DWORD dwHelpContext
  929.             );
  930.  
  931.     HRESULT SetLcid(
  932.                 [in] LCID lcid
  933.             );
  934.  
  935.     HRESULT SetLibFlags(
  936.                 [in] UINT uLibFlags
  937.             );
  938.  
  939.     HRESULT SaveAllChanges(
  940.                 void
  941.             );
  942. }
  943.  
  944.  
  945. [
  946.     object,
  947.     uuid(0002040F-0000-0000-C000-000000000046),
  948.     pointer_default(unique),
  949.     local
  950. ]
  951.  
  952. interface ICreateTypeLib2 : ICreateTypeLib
  953. {
  954.     typedef [unique] ICreateTypeLib2 * LPCREATETYPELIB2;
  955.  
  956.     HRESULT DeleteTypeInfo(
  957.                 [in] LPOLESTR szName
  958.             );
  959.  
  960.     HRESULT SetCustData(
  961.                 [in] REFGUID guid,
  962.                 [in] VARIANT * pVarVal
  963.             );
  964.  
  965.     HRESULT SetHelpStringContext(
  966.                 [in] ULONG dwHelpStringContext
  967.             );
  968.  
  969.     HRESULT SetHelpStringDll(
  970.                 [in] LPOLESTR szFileName
  971.             );
  972. }
  973.  
  974.  
  975. [
  976.     object,
  977.     uuid(00020400-0000-0000-C000-000000000046),
  978.     pointer_default(unique)
  979. ]
  980.  
  981. interface IDispatch : IUnknown
  982. {
  983.     typedef [unique] IDispatch * LPDISPATCH;
  984.  
  985.     HRESULT GetTypeInfoCount(
  986.                 [out] UINT * pctinfo
  987.             );
  988.  
  989.     HRESULT GetTypeInfo(
  990.                 [in] UINT iTInfo,
  991.                 [in] LCID lcid,
  992.                 [out] ITypeInfo ** ppTInfo
  993.             );
  994.  
  995.     HRESULT GetIDsOfNames(
  996.                 [in] REFIID riid,
  997.                 [in, size_is(cNames)] LPOLESTR * rgszNames,
  998.                 [in] UINT cNames,
  999.                 [in] LCID lcid,
  1000.                 [out, size_is(cNames)] DISPID * rgDispId
  1001.             );
  1002.  
  1003.     [local]
  1004.     HRESULT Invoke(
  1005.                 [in] DISPID dispIdMember,
  1006.                 [in] REFIID riid,
  1007.                 [in] LCID lcid,
  1008.                 [in] WORD wFlags,
  1009.                 [in, out] DISPPARAMS * pDispParams,
  1010.                 [out] VARIANT * pVarResult,
  1011.                 [out] EXCEPINFO * pExcepInfo,
  1012.                 [out] UINT * puArgErr
  1013.             );
  1014.  
  1015.     [call_as(Invoke)]
  1016.     HRESULT RemoteInvoke(
  1017.                 [in] DISPID dispIdMember,
  1018.                 [in] REFIID riid,
  1019.                 [in] LCID lcid,
  1020.                 [in] DWORD dwFlags,
  1021.                 [in] DISPPARAMS * pDispParams,
  1022.                 [out] VARIANT * pVarResult,
  1023.                 [out] EXCEPINFO * pExcepInfo,
  1024.                 [out] UINT * pArgErr,
  1025.                 [in] UINT cVarRef,
  1026.                 [in, size_is(cVarRef)] UINT * rgVarRefIdx, 
  1027.                 [in, out, size_is(cVarRef)] VARIANTARG * rgVarRef
  1028.             );
  1029.  
  1030. cpp_quote("/* DISPID reserved to indicate an \"unknown\" name */")
  1031. cpp_quote("/* only reserved for data members (properties); reused as a method dispid below */")
  1032. const DISPID DISPID_UNKNOWN = -1;
  1033.  
  1034. cpp_quote("/* DISPID reserved for the \"value\" property */")
  1035. const DISPID DISPID_VALUE = 0;
  1036.  
  1037. cpp_quote("/* The following DISPID is reserved to indicate the param")
  1038. cpp_quote(" * that is the right-hand-side (or \"put\" value) of a PropertyPut")
  1039. cpp_quote(" */")
  1040. const DISPID DISPID_PROPERTYPUT = -3;
  1041.  
  1042. cpp_quote("/* DISPID reserved for the standard \"NewEnum\" method */")
  1043. const DISPID DISPID_NEWENUM = -4;
  1044.  
  1045. cpp_quote("/* DISPID reserved for the standard \"Evaluate\" method */")
  1046. const DISPID DISPID_EVALUATE = -5;
  1047.  
  1048. const DISPID DISPID_CONSTRUCTOR = -6;
  1049.  
  1050. const DISPID DISPID_DESTRUCTOR = -7;
  1051.  
  1052. const DISPID DISPID_COLLECT = -8;
  1053.  
  1054. cpp_quote("/* The range -500 through -999 is reserved for Controls */")
  1055. cpp_quote("/* The range 0x80010000 through 0x8001FFFF is reserved for Controls */")
  1056. cpp_quote("/* The range -5000 through -5499 is reserved for ActiveX Accessability */")
  1057. cpp_quote("/* The range -2000 through -2499 is reserved for VB5 */")
  1058. cpp_quote("/* The range -3900 through -3999 is reserved for Forms */")
  1059. cpp_quote("/* The range -5500 through -5550 is reserved for Forms */")
  1060. cpp_quote("/* The remainder of the negative DISPIDs are reserved for future use */")
  1061.  
  1062. }
  1063.  
  1064.  
  1065. [
  1066.     object,
  1067.     uuid(00020404-0000-0000-C000-000000000046),
  1068.     pointer_default(unique)
  1069. ]
  1070.  
  1071. interface IEnumVARIANT : IUnknown
  1072. {
  1073.     typedef [unique] IEnumVARIANT* LPENUMVARIANT;
  1074.  
  1075.     [local]
  1076.     HRESULT Next(
  1077.                 [in] ULONG celt,
  1078.                 [out, size_is(celt), length_is(*pCeltFetched)] VARIANT * rgVar,
  1079.                 [out] ULONG * pCeltFetched
  1080.             );
  1081.  
  1082.     [call_as(Next)]
  1083.     HRESULT RemoteNext(
  1084.                 [in] ULONG celt,
  1085.                 [out, size_is(celt), length_is(*pCeltFetched)] VARIANT * rgVar,
  1086.                 [out] ULONG * pCeltFetched
  1087.             );
  1088.  
  1089.     HRESULT Skip(
  1090.                 [in] ULONG celt
  1091.             );
  1092.  
  1093.     HRESULT Reset(
  1094.             );
  1095.  
  1096.     HRESULT Clone(
  1097.                 [out] IEnumVARIANT ** ppEnum
  1098.             );
  1099. }
  1100.  
  1101.  
  1102. [
  1103.     object,
  1104.     uuid(00020403-0000-0000-C000-000000000046),
  1105.     pointer_default(unique)
  1106. ]
  1107.  
  1108. interface ITypeComp : IUnknown
  1109. {
  1110.     typedef [unique] ITypeComp * LPTYPECOMP;
  1111.  
  1112.     typedef [v1_enum] enum tagDESCKIND {
  1113.         DESCKIND_NONE = 0,
  1114.         DESCKIND_FUNCDESC,
  1115.         DESCKIND_VARDESC,
  1116.         DESCKIND_TYPECOMP,
  1117.         DESCKIND_IMPLICITAPPOBJ,
  1118.         DESCKIND_MAX
  1119.     } DESCKIND;
  1120.  
  1121.     typedef union tagBINDPTR {
  1122.         FUNCDESC  * lpfuncdesc;
  1123.         VARDESC   * lpvardesc;
  1124.         ITypeComp * lptcomp;
  1125.     } BINDPTR, * LPBINDPTR;
  1126.  
  1127.     [local]
  1128.     HRESULT Bind(
  1129.                 [in] LPOLESTR szName,
  1130.                 [in] ULONG lHashVal,
  1131.                 [in] WORD wFlags,
  1132.                 [out] ITypeInfo ** ppTInfo,
  1133.                 [out] DESCKIND * pDescKind,
  1134.                 [out] BINDPTR * pBindPtr
  1135.             );
  1136.  
  1137.     [call_as(Bind)]
  1138.     HRESULT RemoteBind(
  1139.                 [in] LPOLESTR szName,
  1140.                 [in] ULONG lHashVal,
  1141.                 [in] WORD wFlags,
  1142.                 [out] ITypeInfo ** ppTInfo,
  1143.                 [out] DESCKIND * pDescKind,
  1144.                 [out] LPFUNCDESC * ppFuncDesc,
  1145.                 [out] LPVARDESC * ppVarDesc,
  1146.                 [out] ITypeComp ** ppTypeComp,
  1147.                 [out] CLEANLOCALSTORAGE * pDummy
  1148.             );
  1149.  
  1150.     [local]
  1151.     HRESULT BindType(
  1152.                 [in] LPOLESTR szName,
  1153.                 [in] ULONG lHashVal,
  1154.                 [out] ITypeInfo ** ppTInfo,
  1155.                 [out] ITypeComp ** ppTComp
  1156.             );
  1157.  
  1158.     [call_as(BindType)]
  1159.     HRESULT RemoteBindType(
  1160.                 [in] LPOLESTR szName,
  1161.                 [in] ULONG lHashVal,
  1162.                 [out] ITypeInfo ** ppTInfo
  1163.             );
  1164. }
  1165.  
  1166.  
  1167. [
  1168.     object,
  1169.     uuid(00020401-0000-0000-C000-000000000046),
  1170.     pointer_default(unique)
  1171. ]
  1172.  
  1173. interface ITypeInfo : IUnknown
  1174. {
  1175.     typedef [unique] ITypeInfo * LPTYPEINFO;
  1176.  
  1177.     [local]
  1178.     HRESULT GetTypeAttr(
  1179.                 [out] TYPEATTR ** ppTypeAttr
  1180.             );
  1181.  
  1182.     [call_as(GetTypeAttr)]
  1183.     HRESULT RemoteGetTypeAttr(
  1184.                 [out] LPTYPEATTR * ppTypeAttr,
  1185.                 [out] CLEANLOCALSTORAGE * pDummy
  1186.             );
  1187.  
  1188.     HRESULT GetTypeComp(
  1189.                 [out] ITypeComp ** ppTComp
  1190.             );
  1191.  
  1192.     [local]
  1193.     HRESULT GetFuncDesc(
  1194.                 [in] UINT index,
  1195.                 [out] FUNCDESC ** ppFuncDesc
  1196.             );
  1197.  
  1198.     [call_as(GetFuncDesc)]
  1199.     HRESULT RemoteGetFuncDesc(
  1200.                 [in] UINT index,
  1201.                 [out] LPFUNCDESC * ppFuncDesc,
  1202.                 [out] CLEANLOCALSTORAGE * pDummy
  1203.             );
  1204.  
  1205.     [local]
  1206.     HRESULT GetVarDesc(
  1207.                 [in] UINT index,
  1208.                 [out] VARDESC ** ppVarDesc
  1209.             );
  1210.  
  1211.     [call_as(GetVarDesc)]
  1212.     HRESULT RemoteGetVarDesc(
  1213.                 [in] UINT index,
  1214.                 [out] LPVARDESC * ppVarDesc,
  1215.                 [out] CLEANLOCALSTORAGE * pDummy
  1216.             );
  1217.  
  1218.     [local]
  1219.     HRESULT GetNames(
  1220.                 [in] MEMBERID memid,
  1221.                 [out,size_is(cMaxNames),length_is(*pcNames)] BSTR * rgBstrNames,
  1222.                 [in] UINT cMaxNames,
  1223.                 [out] UINT * pcNames
  1224.             );
  1225.  
  1226.     [call_as(GetNames)]
  1227.     HRESULT RemoteGetNames(
  1228.                 [in] MEMBERID memid,
  1229.                 [out,size_is(cMaxNames),length_is(*pcNames)] BSTR * rgBstrNames,
  1230.                 [in] UINT cMaxNames,
  1231.                 [out] UINT * pcNames
  1232.             );
  1233.  
  1234.     HRESULT GetRefTypeOfImplType(
  1235.                 [in] UINT index,
  1236.                 [out] HREFTYPE * pRefType
  1237.             );
  1238.  
  1239.     HRESULT GetImplTypeFlags(
  1240.                 [in] UINT index,
  1241.                 [out] INT * pImplTypeFlags
  1242.             );
  1243.  
  1244.     [local]
  1245.     HRESULT GetIDsOfNames(
  1246.                 [in, size_is(cNames)] LPOLESTR * rgszNames,
  1247.                 [in] UINT cNames,
  1248.                 [out, size_is(cNames)] MEMBERID * pMemId
  1249.             );
  1250.  
  1251.     [call_as(GetIDsOfNames)]
  1252.     HRESULT LocalGetIDsOfNames(
  1253.                 void
  1254.             );
  1255.  
  1256.     [local]
  1257.     HRESULT Invoke(
  1258.                 [in] PVOID pvInstance,
  1259.                 [in] MEMBERID memid,
  1260.                 [in] WORD wFlags,
  1261.                 [in, out] DISPPARAMS * pDispParams,
  1262.                 [out] VARIANT * pVarResult,
  1263.                 [out] EXCEPINFO * pExcepInfo,
  1264.                 [out] UINT * puArgErr
  1265.             );
  1266.  
  1267.     [call_as(Invoke)]
  1268.     HRESULT LocalInvoke (
  1269.                 void
  1270.             );
  1271.  
  1272.     [local]
  1273.     HRESULT GetDocumentation(
  1274.                 [in] MEMBERID memid,
  1275.                 [out] BSTR * pBstrName,
  1276.                 [out] BSTR * pBstrDocString,
  1277.                 [out] DWORD * pdwHelpContext,
  1278.                 [out] BSTR * pBstrHelpFile
  1279.             );
  1280.  
  1281.     [call_as(GetDocumentation)]
  1282.     HRESULT RemoteGetDocumentation(
  1283.                 [in] MEMBERID memid,
  1284.                 [in] DWORD refPtrFlags,
  1285.                 [out] BSTR * pBstrName,
  1286.                 [out] BSTR * pBstrDocString,
  1287.                 [out] DWORD * pdwHelpContext,
  1288.                 [out] BSTR * pBstrHelpFile
  1289.             );
  1290.  
  1291.     [local]
  1292.     HRESULT GetDllEntry(
  1293.                 [in] MEMBERID memid,
  1294.                 [in] INVOKEKIND invKind,
  1295.                 [out] BSTR * pBstrDllName,
  1296.                 [out] BSTR * pBstrName,
  1297.                 [out] WORD * pwOrdinal
  1298.             );
  1299.  
  1300.     [call_as(GetDllEntry)]
  1301.     HRESULT RemoteGetDllEntry(
  1302.                 [in] MEMBERID memid,
  1303.                 [in] INVOKEKIND invKind,
  1304.                 [in] DWORD refPtrFlags,
  1305.                 [out] BSTR * pBstrDllName,
  1306.                 [out] BSTR * pBstrName,
  1307.                 [out] WORD * pwOrdinal
  1308.             );
  1309.  
  1310.     HRESULT GetRefTypeInfo(
  1311.                 [in] HREFTYPE hRefType,
  1312.                 [out] ITypeInfo ** ppTInfo
  1313.             );
  1314.  
  1315.     [local]
  1316.     HRESULT AddressOfMember(
  1317.                 [in] MEMBERID memid,
  1318.                 [in] INVOKEKIND invKind,
  1319.                 [out] PVOID * ppv
  1320.             );
  1321.  
  1322.     [call_as(AddressOfMember)]
  1323.     HRESULT LocalAddressOfMember(
  1324.                 void
  1325.             );
  1326.  
  1327.     [local]
  1328.     HRESULT CreateInstance(
  1329.                 [in] IUnknown * pUnkOuter,
  1330.                 [in] REFIID riid,
  1331.                 [out, iid_is(riid)] PVOID * ppvObj
  1332.             );
  1333.  
  1334.     [call_as(CreateInstance)]
  1335.     HRESULT RemoteCreateInstance(
  1336.                 [in] REFIID riid,
  1337.                 [out, iid_is(riid)] IUnknown ** ppvObj
  1338.             );
  1339.  
  1340.     HRESULT GetMops(
  1341.                 [in] MEMBERID memid,
  1342.                 [out] BSTR * pBstrMops
  1343.             );
  1344.  
  1345.     [local]
  1346.     HRESULT GetContainingTypeLib(
  1347.                 [out] ITypeLib ** ppTLib,
  1348.                 [out] UINT * pIndex
  1349.             );
  1350.  
  1351.     [call_as(GetContainingTypeLib)]
  1352.     HRESULT RemoteGetContainingTypeLib(
  1353.                 [out] ITypeLib ** ppTLib,
  1354.                 [out] UINT * pIndex
  1355.             );
  1356.  
  1357.     [local]
  1358.     void ReleaseTypeAttr(
  1359.                 [in] TYPEATTR * pTypeAttr
  1360.             );
  1361.  
  1362.     [call_as(ReleaseTypeAttr)]
  1363.     HRESULT LocalReleaseTypeAttr(
  1364.                 void
  1365.             );
  1366.  
  1367.     [local]
  1368.     void ReleaseFuncDesc(
  1369.                 [in] FUNCDESC * pFuncDesc
  1370.             );
  1371.  
  1372.     [call_as(ReleaseFuncDesc)]
  1373.     HRESULT LocalReleaseFuncDesc(
  1374.                 void
  1375.             );
  1376.  
  1377.     [local]
  1378.     void ReleaseVarDesc(
  1379.                 [in] VARDESC * pVarDesc
  1380.             );
  1381.  
  1382.     [call_as(ReleaseVarDesc)]
  1383.     HRESULT LocalReleaseVarDesc(
  1384.                 void
  1385.             );
  1386. }
  1387.  
  1388.  
  1389.  
  1390. [
  1391.     object,
  1392.     uuid(00020412-0000-0000-C000-000000000046),
  1393.     pointer_default(unique)
  1394. ]
  1395.  
  1396. interface ITypeInfo2 : ITypeInfo
  1397. {
  1398.     typedef [unique] ITypeInfo2 * LPTYPEINFO2;
  1399.  
  1400.     HRESULT GetTypeKind(
  1401.                 [out] TYPEKIND * pTypeKind
  1402.             );
  1403.  
  1404.     HRESULT GetTypeFlags(
  1405.                 [out] ULONG * pTypeFlags
  1406.             );
  1407.  
  1408.     HRESULT GetFuncIndexOfMemId(
  1409.                 [in] MEMBERID memid, 
  1410.                 [in] INVOKEKIND invKind, 
  1411.                 [out] UINT * pFuncIndex
  1412.             );
  1413.  
  1414.     HRESULT GetVarIndexOfMemId(
  1415.                 [in] MEMBERID memid, 
  1416.                 [out] UINT * pVarIndex
  1417.             );
  1418.  
  1419.     HRESULT GetCustData(
  1420.                 [in] REFGUID guid,
  1421.                 [out] VARIANT * pVarVal
  1422.             );
  1423.     
  1424.     HRESULT GetFuncCustData(
  1425.                 [in] UINT index, 
  1426.                 [in] REFGUID guid, 
  1427.                 [out] VARIANT * pVarVal
  1428.             );
  1429.     
  1430.     HRESULT GetParamCustData(
  1431.                 [in] UINT indexFunc, 
  1432.                 [in] UINT indexParam, 
  1433.                 [in] REFGUID guid, 
  1434.                 [out] VARIANT * pVarVal
  1435.             );
  1436.  
  1437.     HRESULT GetVarCustData(
  1438.                 [in] UINT index, 
  1439.                 [in] REFGUID guid, 
  1440.                 [out] VARIANT * pVarVal
  1441.             );
  1442.  
  1443.     HRESULT GetImplTypeCustData(
  1444.                 [in] UINT index, 
  1445.                 [in] REFGUID guid, 
  1446.                 [out] VARIANT * pVarVal
  1447.             );
  1448.  
  1449.     [local]
  1450.     HRESULT GetDocumentation2(
  1451.                 [in] MEMBERID memid,
  1452.                 [in] LCID lcid,
  1453.                 [out] BSTR *pbstrHelpString,
  1454.                 [out] DWORD *pdwHelpStringContext,
  1455.                 [out] BSTR *pbstrHelpStringDll
  1456.             );
  1457.  
  1458.     [call_as(GetDocumentation2)]
  1459.     HRESULT RemoteGetDocumentation2(
  1460.                 [in] MEMBERID memid,
  1461.                 [in] LCID lcid,
  1462.                 [in] DWORD refPtrFlags,
  1463.                 [out] BSTR *pbstrHelpString,
  1464.                 [out] DWORD *pdwHelpStringContext,
  1465.                 [out] BSTR *pbstrHelpStringDll
  1466.             );
  1467.  
  1468.     HRESULT GetAllCustData(
  1469.                 [out] CUSTDATA * pCustData
  1470.             );
  1471.     
  1472.     HRESULT GetAllFuncCustData(
  1473.                 [in] UINT index, 
  1474.                 [out] CUSTDATA * pCustData
  1475.             );
  1476.     
  1477.     HRESULT GetAllParamCustData(
  1478.                 [in] UINT indexFunc, 
  1479.                 [in] UINT indexParam, 
  1480.                 [out] CUSTDATA * pCustData
  1481.             );
  1482.  
  1483.     HRESULT GetAllVarCustData(
  1484.                 [in] UINT index, 
  1485.                 [out] CUSTDATA * pCustData
  1486.             );
  1487.  
  1488.     HRESULT GetAllImplTypeCustData(
  1489.                 [in] UINT index, 
  1490.                 [out] CUSTDATA * pCustData
  1491.             );
  1492. }
  1493.  
  1494.  
  1495. [
  1496.     object,
  1497.     uuid(00020402-0000-0000-C000-000000000046),
  1498.     pointer_default(unique)
  1499. ]
  1500.  
  1501. interface ITypeLib : IUnknown
  1502. {
  1503.     typedef [v1_enum] enum tagSYSKIND {
  1504.         SYS_WIN16 = 0,
  1505.         SYS_WIN32,
  1506.         SYS_MAC
  1507.     } SYSKIND;
  1508.  
  1509.     typedef [v1_enum] enum tagLIBFLAGS {
  1510.         LIBFLAG_FRESTRICTED = 0x01,
  1511.         LIBFLAG_FCONTROL = 0x02,
  1512.         LIBFLAG_FHIDDEN = 0x04,
  1513.         LIBFLAG_FHASDISKIMAGE = 0x08
  1514.     } LIBFLAGS;
  1515.  
  1516.     typedef [unique] ITypeLib * LPTYPELIB;
  1517.  
  1518.     typedef struct tagTLIBATTR {
  1519.         GUID guid;
  1520.         LCID lcid;
  1521.         SYSKIND syskind;
  1522.         WORD wMajorVerNum;
  1523.         WORD wMinorVerNum;
  1524.         WORD wLibFlags;
  1525.     } TLIBATTR, * LPTLIBATTR;
  1526.  
  1527.     [local]
  1528.     UINT GetTypeInfoCount(
  1529.                 void
  1530.             );
  1531.  
  1532.     [call_as(GetTypeInfoCount)]
  1533.     HRESULT RemoteGetTypeInfoCount(
  1534.                 [out]  UINT * pcTInfo
  1535.             );
  1536.  
  1537.     HRESULT GetTypeInfo(
  1538.                 [in]  UINT index,
  1539.                 [out] ITypeInfo ** ppTInfo
  1540.             );
  1541.  
  1542.     HRESULT GetTypeInfoType(
  1543.                 [in]  UINT index,
  1544.                 [out] TYPEKIND * pTKind
  1545.             );
  1546.  
  1547.     HRESULT GetTypeInfoOfGuid(
  1548.                 [in]  REFGUID guid,
  1549.                 [out] ITypeInfo ** ppTinfo
  1550.             );
  1551.  
  1552.     [local]
  1553.     HRESULT GetLibAttr(
  1554.                 [out] TLIBATTR ** ppTLibAttr
  1555.             );
  1556.  
  1557.     [call_as(GetLibAttr)]
  1558.     HRESULT RemoteGetLibAttr(
  1559.                 [out] LPTLIBATTR * ppTLibAttr,
  1560.                 [out] CLEANLOCALSTORAGE * pDummy
  1561.             );
  1562.  
  1563.     HRESULT GetTypeComp(
  1564.                 [out] ITypeComp ** ppTComp
  1565.             );
  1566.  
  1567.     [local]
  1568.     HRESULT GetDocumentation(
  1569.                 [in]  INT index,
  1570.                 [out] BSTR * pBstrName,
  1571.                 [out] BSTR * pBstrDocString,
  1572.                 [out] DWORD * pdwHelpContext,
  1573.                 [out] BSTR * pBstrHelpFile
  1574.             );
  1575.  
  1576.     [call_as(GetDocumentation)]
  1577.     HRESULT RemoteGetDocumentation(
  1578.                 [in]  INT index,
  1579.                 [in]  DWORD refPtrFlags,
  1580.                 [out] BSTR * pBstrName,
  1581.                 [out] BSTR * pBstrDocString,
  1582.                 [out] DWORD * pdwHelpContext,
  1583.                 [out] BSTR * pBstrHelpFile
  1584.             );
  1585.  
  1586.     [local]
  1587.     HRESULT IsName(
  1588.                 [in, out] LPOLESTR szNameBuf,
  1589.                 [in] ULONG lHashVal,
  1590.                 [out] BOOL * pfName
  1591.             );
  1592.  
  1593.     [call_as(IsName)]
  1594.     HRESULT RemoteIsName(
  1595.                 [in] LPOLESTR szNameBuf,
  1596.                 [in] ULONG lHashVal,
  1597.                 [out] BOOL * pfName,
  1598.                 [out] BSTR * pBstrLibName
  1599.             );
  1600.  
  1601.     [local]
  1602.     HRESULT FindName(
  1603.                 [in, out] LPOLESTR szNameBuf,
  1604.                 [in] ULONG lHashVal,
  1605.                 [out,size_is(*pcFound),length_is(*pcFound)] ITypeInfo **ppTInfo,
  1606.                 [out,size_is(*pcFound),length_is(*pcFound)] MEMBERID * rgMemId,
  1607.                 [in, out] USHORT * pcFound
  1608.             );
  1609.  
  1610.     [call_as(FindName)]
  1611.     HRESULT RemoteFindName(
  1612.                 [in] LPOLESTR szNameBuf,
  1613.                 [in] ULONG lHashVal,
  1614.                 [out,size_is(*pcFound),length_is(*pcFound)] ITypeInfo **ppTInfo,
  1615.                 [out,size_is(*pcFound),length_is(*pcFound)] MEMBERID * rgMemId,
  1616.                 [in, out] USHORT * pcFound,
  1617.                 [out] BSTR * pBstrLibName
  1618.             );
  1619.  
  1620.     [local]
  1621.     void ReleaseTLibAttr(
  1622.                 [in]  TLIBATTR * pTLibAttr
  1623.             );
  1624.  
  1625.     [call_as(ReleaseTLibAttr)]
  1626.     HRESULT LocalReleaseTLibAttr(
  1627.                 void
  1628.             );
  1629. }
  1630.  
  1631.  
  1632. [
  1633.     object,
  1634.     uuid(00020411-0000-0000-C000-000000000046),
  1635.     pointer_default(unique)
  1636. ]
  1637.  
  1638. interface ITypeLib2 : ITypeLib
  1639. {
  1640.     typedef [unique] ITypeLib2 * LPTYPELIB2;
  1641.  
  1642.     HRESULT GetCustData(
  1643.                 [in] REFGUID guid,
  1644.                 [out] VARIANT * pVarVal
  1645.             );
  1646.  
  1647.     [local]
  1648.     HRESULT GetLibStatistics(
  1649.                 [out] ULONG * pcUniqueNames,
  1650.                 [out] ULONG * pcchUniqueNames
  1651.             );
  1652.  
  1653.     [call_as(GetLibStatistics)]
  1654.     HRESULT RemoteGetLibStatistics(
  1655.                 [out] ULONG * pcUniqueNames,
  1656.                 [out] ULONG * pcchUniqueNames
  1657.             );
  1658.  
  1659.     [local]
  1660.     HRESULT GetDocumentation2(
  1661.                 [in]  INT index,
  1662.                 [in]  LCID lcid,
  1663.                 [out] BSTR *pbstrHelpString,
  1664.                 [out] DWORD *pdwHelpStringContext,
  1665.                 [out] BSTR *pbstrHelpStringDll
  1666.             );
  1667.  
  1668.     [call_as(GetDocumentation2)]
  1669.     HRESULT RemoteGetDocumentation2(
  1670.                 [in]  INT index,
  1671.                 [in]  LCID lcid,
  1672.                 [in]  DWORD refPtrFlags,
  1673.                 [out] BSTR *pbstrHelpString,
  1674.                 [out] DWORD *pdwHelpStringContext,
  1675.                 [out] BSTR *pbstrHelpStringDll
  1676.             );
  1677.  
  1678.  
  1679.     HRESULT GetAllCustData(
  1680.                 [out] CUSTDATA * pCustData
  1681.             );
  1682. }
  1683.  
  1684.  
  1685. [
  1686.     object,
  1687.     uuid(00020410-0000-0000-C000-000000000046),
  1688.     pointer_default(unique),
  1689.     local
  1690. ]
  1691.  
  1692. interface ITypeChangeEvents: IUnknown
  1693. {
  1694.     typedef [unique] ITypeChangeEvents * LPTYPECHANGEEVENTS;
  1695.  
  1696.     // notification messages used by the dynamic typeinfo protocol.
  1697.     typedef enum tagCHANGEKIND {
  1698.         CHANGEKIND_ADDMEMBER,
  1699.         CHANGEKIND_DELETEMEMBER,
  1700.         CHANGEKIND_SETNAMES,
  1701.         CHANGEKIND_SETDOCUMENTATION,
  1702.         CHANGEKIND_GENERAL,
  1703.         CHANGEKIND_INVALIDATE,
  1704.         CHANGEKIND_CHANGEFAILED,
  1705.         CHANGEKIND_MAX
  1706.     } CHANGEKIND;
  1707.  
  1708.     HRESULT RequestTypeChange(
  1709.                 [in] CHANGEKIND changeKind,
  1710.                 [in] ITypeInfo * pTInfoBefore,
  1711.                 [in] LPOLESTR pStrName,
  1712.                 [out] INT * pfCancel
  1713.             );
  1714.     
  1715.     HRESULT AfterTypeChange(
  1716.                 [in] CHANGEKIND changeKind,
  1717.                 [in] ITypeInfo * pTInfoAfter,
  1718.                 [in] LPOLESTR pStrName
  1719.             );
  1720. }
  1721.  
  1722.  
  1723. [
  1724.     object,
  1725.     uuid(1CF2B120-547D-101B-8E65-08002B2BD119),
  1726.     pointer_default(unique)
  1727. ]
  1728.  
  1729. interface IErrorInfo: IUnknown
  1730. {
  1731.     typedef [unique] IErrorInfo * LPERRORINFO;
  1732.  
  1733.     HRESULT GetGUID(
  1734.                 [out] GUID * pGUID
  1735.             );
  1736.  
  1737.     HRESULT GetSource(
  1738.                 [out] BSTR * pBstrSource
  1739.             );
  1740.  
  1741.     HRESULT GetDescription(
  1742.                 [out] BSTR * pBstrDescription
  1743.             );
  1744.  
  1745.     HRESULT GetHelpFile(
  1746.                 [out] BSTR * pBstrHelpFile
  1747.             );
  1748.  
  1749.     HRESULT GetHelpContext(
  1750.                 [out] DWORD * pdwHelpContext
  1751.             );
  1752. }
  1753.  
  1754.  
  1755. [
  1756.     object,
  1757.     uuid(22F03340-547D-101B-8E65-08002B2BD119),
  1758.     pointer_default(unique)
  1759. ]
  1760.  
  1761. interface ICreateErrorInfo: IUnknown
  1762. {
  1763.     typedef [unique] ICreateErrorInfo * LPCREATEERRORINFO;
  1764.  
  1765.     HRESULT SetGUID(
  1766.                 [in] REFGUID rguid
  1767.             );
  1768.  
  1769.     HRESULT SetSource(
  1770.                 [in] LPOLESTR szSource
  1771.             );
  1772.  
  1773.     HRESULT SetDescription(
  1774.                 [in] LPOLESTR szDescription
  1775.             );
  1776.  
  1777.     HRESULT SetHelpFile(
  1778.                 [in] LPOLESTR szHelpFile
  1779.             );
  1780.  
  1781.     HRESULT SetHelpContext(
  1782.                 [in] DWORD dwHelpContext
  1783.             );
  1784. }
  1785.  
  1786.  
  1787. [
  1788.     object,
  1789.     uuid(DF0B3D60-548F-101B-8E65-08002B2BD119),
  1790.     pointer_default(unique)
  1791. ]
  1792.  
  1793. interface ISupportErrorInfo: IUnknown
  1794. {
  1795.     typedef [unique] ISupportErrorInfo * LPSUPPORTERRORINFO;
  1796.  
  1797.     HRESULT InterfaceSupportsErrorInfo(
  1798.                 [in]  REFIID riid
  1799.             );
  1800. }
  1801.  
  1802.  
  1803. [
  1804.     object,
  1805.     uuid(0000002E-0000-0000-C000-000000000046)
  1806. ]
  1807.  
  1808. interface ITypeFactory : IUnknown
  1809. {
  1810.     HRESULT CreateFromTypeInfo(
  1811.                 [in] ITypeInfo *pTypeInfo,
  1812.                 [in] REFIID riid,
  1813.                 [out, iid_is(riid)] IUnknown **ppv
  1814.             );
  1815. }
  1816.  
  1817.  
  1818. [
  1819.     local,
  1820.     object,
  1821.     uuid(0000002D-0000-0000-C000-000000000046)
  1822. ]
  1823.  
  1824. interface ITypeMarshal : IUnknown
  1825. {
  1826.     HRESULT Size(
  1827.                 [in]  PVOID pvType,
  1828.                 [in]  DWORD dwDestContext,
  1829.                 [in]  PVOID pvDestContext,
  1830.                 [out] ULONG * pSize
  1831.             );
  1832.  
  1833.     HRESULT Marshal(
  1834.                 [in]  PVOID pvType,
  1835.                 [in]  DWORD dwDestContext,
  1836.                 [in]  PVOID pvDestContext,
  1837.                 [in]  ULONG cbBufferLength,
  1838.                 [out] BYTE  * pBuffer,
  1839.                 [out] ULONG * pcbWritten
  1840.             );
  1841.  
  1842.     HRESULT Unmarshal(
  1843.                 [out] PVOID pvType,
  1844.                 [in]  DWORD dwFlags,
  1845.                 [in]  ULONG cbBufferLength,
  1846.                 [in]  BYTE  * pBuffer,
  1847.                 [out] ULONG * pcbRead
  1848.             );
  1849.  
  1850.     HRESULT Free(
  1851.                 [in] PVOID pvType
  1852.             );
  1853. }
  1854.  
  1855.  
  1856. [
  1857.     local,
  1858.     object,
  1859.     uuid(0000002F-0000-0000-C000-000000000046)
  1860. ]
  1861.  
  1862. interface IRecordInfo: IUnknown
  1863. {
  1864.     typedef [unique] IRecordInfo * LPRECORDINFO;
  1865.  
  1866.     HRESULT RecordInit(
  1867.                 [out] PVOID pvNew
  1868.             );
  1869.  
  1870.     HRESULT RecordClear(
  1871.                 [in]  PVOID pvExisting
  1872.             );
  1873.  
  1874.     HRESULT RecordCopy(
  1875.                 [in]  PVOID pvExisting,
  1876.                 [out] PVOID pvNew
  1877.             );
  1878.  
  1879.     HRESULT GetGuid(
  1880.                 [out] GUID * pguid
  1881.             );
  1882.  
  1883.     HRESULT GetName(
  1884.                 [out] BSTR * pbstrName
  1885.             );
  1886.  
  1887.     HRESULT GetSize(
  1888.                 [out] ULONG * pcbSize
  1889.             );
  1890.  
  1891.     HRESULT GetTypeInfo(
  1892.                 [out] ITypeInfo ** ppTypeInfo
  1893.             );
  1894.  
  1895.     HRESULT GetField(
  1896.                 [in]  PVOID pvData,
  1897.                 [in]  LPCOLESTR szFieldName,
  1898.                 [out] VARIANT * pvarField
  1899.             );
  1900.  
  1901.     HRESULT GetFieldNoCopy(
  1902.                 [in]  PVOID pvData,
  1903.                 [in]  LPCOLESTR szFieldName,
  1904.                 [out] VARIANT * pvarField,
  1905.                 [out] PVOID * ppvDataCArray
  1906.             );
  1907.  
  1908.     HRESULT PutField(
  1909.                 [in] ULONG wFlags,
  1910.                 [in,out] PVOID pvData,
  1911.                 [in]  LPCOLESTR szFieldName,
  1912.                 [in]  VARIANT * pvarField
  1913.             );
  1914.  
  1915.     HRESULT PutFieldNoCopy(
  1916.                 [in] ULONG wFlags,
  1917.                 [in,out] PVOID pvData,
  1918.                 [in]  LPCOLESTR szFieldName,
  1919.                 [in]  VARIANT * pvarField
  1920.             );
  1921.  
  1922.     HRESULT GetFieldNames(
  1923.                 [in,out] ULONG * pcNames,
  1924.                 [out,size_is(*pcNames),length_is(*pcNames)] BSTR * rgBstrNames
  1925.             );
  1926.  
  1927.     BOOL IsMatchingType(
  1928.                 [in] IRecordInfo * pRecordInfo
  1929.             );
  1930.  
  1931.     PVOID RecordCreate(
  1932.             );
  1933.  
  1934.     HRESULT RecordCreateCopy(
  1935.                 [in] PVOID pvSource,
  1936.                 [out] PVOID * ppvDest
  1937.             );
  1938.  
  1939.     HRESULT RecordDestroy(
  1940.                 [in] PVOID pvRecord
  1941.             );
  1942. }
  1943.  
  1944.  
  1945. cpp_quote("#if ( _MSC_VER >= 800 )")
  1946. cpp_quote("#pragma warning(default:4201) /* Nameless struct/union */")
  1947. cpp_quote("#endif")
  1948.