OAIdl.Idl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:59k
源码类别:

模拟服务器

开发平台:

C/C++

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