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

模拟服务器

开发平台:

C/C++

  1.         //@parm IEventPropertyBag ** | ppProperties | [out,retval] Receives the result.
  2.         //@rvalue S_OK | Success.
  3.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  4.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  5.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  6.         [helpstring("Get the source properties."), propget]
  7.         HRESULT Properties([out,retval] IEventPropertyBag **ppProperties);
  8.         //@method HRESULT | IEventSource | Save | Save changes.  Changes made with the other methods on
  9.         // this interface do not take effect until this method is called.
  10.         //@rvalue S_OK | Success.
  11.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  12.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  13.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  14.         [helpstring("Save changes.")]
  15.         HRESULT Save();
  16. };
  17. //@doc EVENTS EXTERNAL
  18. /*
  19.         @interface IEventSources | Provides access to a collection of event sources.
  20.         @meth HRESULT | Item | Get a source.
  21.         @meth HRESULT | Add | Create a source.
  22.         @meth HRESULT | Remove | Remove a source.
  23.         @meth HRESULT | Count [propget] | Get the count of the sources.
  24.         @meth HRESULT | _NewEnum [propget] | Get an enumerator for the sources.
  25.         @xref <i IEventSource>
  26. */
  27. [
  28.         dual,
  29.         helpstring("Provides access to a collection of event sources."),
  30.         object,
  31.         oleautomation,
  32.         pointer_default(unique),
  33.         uuid(73e8c930-a652-11d0-a9ea-00aa00685c74)
  34. ]
  35. interface IEventSources : IDispatch
  36. {
  37.         import "wtypes.idl";
  38.         import "ocidl.idl";
  39.         //@method HRESULT | IEventSources | Item | Get a source.
  40.         //@parm VARIANT * | pvarDesired | [out,retval] Specifies the source to get.  This is either a
  41.         // number representing the one-based index of the desired source in the collection, or it is a
  42.         // string representing the GUID of the source (presumably converted using the StringFromGUID2()
  43.         // function).
  44.         //@parm IEventSource ** | ppSource | [out,retval] Receives the result.
  45.         //@rvalue S_OK | Success.
  46.         //@rvalue S_FALSE | Success, the item was not present.  *ppSource is NULL.
  47.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  48.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  49.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  50.         //@xref <i IEventSource>
  51.         [helpstring("Get a source."),id(DISPID_VALUE)]
  52.         HRESULT Item([in] VARIANT *pvarDesired, [out,retval] IEventSource **ppSource);
  53.         //@method HRESULT | IEventSources | Add | Create a source.  This method creates an unitialized
  54.         // source - the client must call methods on the resulting IEventSource interface to set
  55.         // properties for the new source, and then must call IEventSource::Save() to save the new source.
  56.         //@parm BSTR | pszSource | [in] Specifies the ID of the new source.  This must be a GUID,
  57.         // converted to a string using the StringFromGUID2() function.  If this value is NULL, or an
  58.         // empty string, or GUID_NULL, then a new GUID will be generated for the source (and the
  59.         // IEventSource::ID() [propget] method can be used to retrieve it).
  60.         //@parm IEventSource ** | ppSource | [out,retval] Receives the result.
  61.         //@rvalue S_OK | Success.
  62.         //@rvalue S_FALSE | Success, the source already existed.  A pointer to the pre-existing source is
  63.         // returned.
  64.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  65.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  66.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  67.         //@xref <i IEventSource> <om IEventSource::ID [propget]>
  68.         [helpstring("Create a source.")]
  69.         HRESULT Add([in] BSTR pszSource, [out,retval] IEventSource **ppSource);
  70.         //@method HRESULT | IEventSources | Remove | Remove a source.
  71.         //@parm VARIANT * | pvarDesired | [in] Specifies the source to remove.  This must be a GUID,
  72.         // converted to a string using the StringFromGUID2() function.
  73.         //@rvalue S_OK | Success.
  74.         //@rvalue S_FALSE | Success, the source didn't exist.
  75.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  76.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  77.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  78.         //@xref <om IEventSource::ID [propget]>
  79.         [helpstring("Remove a source.")]
  80.         HRESULT Remove([in] VARIANT *pvarDesired);
  81.         //@method HRESULT | IEventSources | Count [propget] | Get the count of the sources.
  82.         //@parm long * | plCount | [out,retval] Receives the result.
  83.         //@rvalue S_OK | Success.
  84.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  85.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  86.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  87.         [helpstring("Get the count of the sources."),propget]
  88.         HRESULT Count([out,retval] long *plCount);
  89.         //@method HRESULT | IEventSources | _NewEnum [propget] | Get an enumerator for the sources.
  90.         //@parm IUnknown ** | ppUnkEnum | [out,retval] Receives the result, which is an object which
  91.         // implements IEnumVARIANT for enumerating the IEventSource interfaces of the event types in the
  92.         // collection.
  93.         //@rvalue S_OK | Success.
  94.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  95.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  96.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  97.         //@xref <i IEventSource>
  98.         [helpstring("Get an enumerator for the sources."),id(DISPID_NEWENUM),propget,hidden]
  99.         HRESULT _NewEnum([out,retval] IUnknown **ppUnkEnum);
  100. };
  101. //@doc EVENTS EXTERNAL
  102. /*
  103.         @interface IEventSourceType | Provides access to information about a source type.
  104.         @meth HRESULT | ID [propget] | Get the ID.
  105.         @meth HRESULT | DisplayName [propget] | Get the display name.
  106.         @meth HRESULT | DisplayName [propput] | Set the display name.
  107.         @meth HRESULT | DisplayName [propputref] | Set the display name.
  108.         @meth HRESULT | EventTypes [propget] | Get the event types.
  109.         @meth HRESULT | Sources [propget] | Get the sources.
  110.         @meth HRESULT | Save | Save changes.
  111.         @xref <i IEventSources> <om IEventSourceType::Sources [propget]>
  112. */
  113. [
  114.         dual,
  115.         helpstring("Provides access to information about a source type."),
  116.         object,
  117.         oleautomation,
  118.         pointer_default(unique),
  119.         uuid(063a62e0-a652-11d0-a9ea-00aa00685c74)
  120. ]
  121. interface IEventSourceType : IDispatch
  122. {
  123.         import "wtypes.idl";
  124.         import "ocidl.idl";
  125.         //@method HRESULT | IEventSourceType | ID [propget] | Get the ID.
  126.         //@parm BSTR * | pstrID | [out,retval] Receives the result.  This will be the GUID of the
  127.         // source type, converted to a string using the StringFromGUID2() function.
  128.         //@rvalue S_OK | Success.
  129.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  130.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  131.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  132.         [helpstring("Get the ID."),propget]
  133.         HRESULT ID([out,retval] BSTR *pstrID);
  134.         //@method HRESULT | IEventSourceType | DisplayName [propget] | Get the display name.
  135.         //@parm BSTR * | pstrDisplayName | [out,retval] Receives the result.
  136.         //@rvalue S_OK | Success.
  137.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  138.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  139.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  140.         [helpstring("Get the display name."),propget]
  141.         HRESULT DisplayName([out,retval] BSTR *pstrDisplayName);
  142.         //@method HRESULT | IEventSourceType | DisplayName [propput] | Set the display name.
  143.         //@parm BSTR | pszDisplayName | [in] Specifies the value.
  144.         //@rvalue S_OK | Success.
  145.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  146.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  147.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  148.         [helpstring("Set the display name."),propput]
  149.         HRESULT DisplayName([in] BSTR pszDisplayName);
  150.         //@method HRESULT | IEventSourceType | DisplayName [propputref] | Set the display name.
  151.         //@parm BSTR * | ppszDisplayName | [in] Specifies the value.
  152.         //@rvalue S_OK | Success.
  153.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  154.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  155.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  156.         [helpstring("Set the display name."),propputref]
  157.         HRESULT DisplayName([in] BSTR *ppszDisplayName);
  158.         //@method HRESULT | IEventSourceType | EventTypes [propget] | Get the event types.
  159.         //@parm IEventTypes ** | ppEventTypes | [out,retval] Receives the result.
  160.         //@rvalue S_OK | Success.
  161.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  162.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  163.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  164.         //@xref <i IEventTypes> <i IEventType>
  165.         [helpstring("Get the event types."),propget]
  166.         HRESULT EventTypes([out,retval] IEventTypes **ppEventTypes);
  167.         //@method HRESULT | IEventSourceType | Sources [propget] | Get the event sources.
  168.         //@parm IEventSources ** | ppSources | [out,retval] Receives the result.
  169.         //@rvalue S_OK | Success.
  170.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  171.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  172.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  173.         //@xref <i IEventSources> <i IEventSource>
  174.         [helpstring("Get the event sources."),propget]
  175.         HRESULT Sources([out,retval] IEventSources **ppSources);
  176.         //@method HRESULT | IEventSourceType | Save | Save changes.  Changes made with the other methods on
  177.         // this interface do not take effect until this method is called.
  178.         //@rvalue S_OK | Success.
  179.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  180.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  181.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  182.         [helpstring("Save changes.")]
  183.         HRESULT Save();
  184. };
  185. //@doc EVENTS EXTERNAL
  186. /*
  187.         @interface IEventSourceTypes | Provides access to a collection of event source types.
  188.         @meth HRESULT | Item | Get a source type.
  189.         @meth HRESULT | Add | Create a source type.
  190.         @meth HRESULT | Remove | Remove a source type.
  191.         @meth HRESULT | Count [propget] | Get the count of the source types.
  192.         @meth HRESULT | _NewEnum [propget] | Get an enumerator for the source types.
  193.         @xref <i IEventSourceType> <om IEventManager::SourceTypes [propget]>
  194. */
  195. [
  196.         dual,
  197.         helpstring("Provides access to a collection of event source types."),
  198.         object,
  199.         oleautomation,
  200.         pointer_default(unique),
  201.         uuid(caf30fd0-a651-11d0-a9ea-00aa00685c74)
  202. ]
  203. interface IEventSourceTypes : IDispatch
  204. {
  205.         import "wtypes.idl";
  206.         import "ocidl.idl";
  207.         //@method HRESULT | IEventSourceTypes | Item | Get a source type.
  208.         //@parm VARIANT * | pvarDesired | [in] Specifies the source type to get.  This is either a number
  209.         // representing the one-based index of the source type in the collection, or it is the GUID of
  210.         // source type, converted to a string using the StringFromGUID2() function.
  211.         //@parm IEventSourceType ** | ppSourceType | [out,retval] Receives the result.
  212.         //@rvalue S_OK | Success.
  213.         //@rvalue S_FALSE | Success, the item is not present.  *ppSourceType is NULL.
  214.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  215.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  216.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  217.         //@xref <i IEventSourceType>
  218.         [helpstring("Get a source type."),id(DISPID_VALUE)]
  219.         HRESULT Item([in] VARIANT *pvarDesired, [out,retval] IEventSourceType **ppSourceType);
  220.         //@method HRESULT | IEventSourceTypes | Add | Add a source type.
  221.         //@parm BSTR | pszSourceType | [in] Specifies the ID for the new source type.  This is a
  222.         // GUID, converted to a string using the StringFromGUID2() function.  If this value is NULL, or
  223.         // an empty string, or GUID_NULL, then a new GUID will be generated for the source type (and can
  224.         // be retrieved using the IEventSourceType::ID() method).
  225.         //@parm IEventSourceType ** | ppSourceType | [out,retval] Receives the result.
  226.         //@rvalue S_OK | Success.
  227.         //@rvalue S_FALSE | Success, the source type already existed, and a pointer to the pre-existing
  228.         // type is returned.
  229.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  230.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  231.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  232.         //@xref <i IEventSourceType>
  233.         [helpstring("Create a source type.")]
  234.         HRESULT Add([in] BSTR pszSourceType, [out,retval] IEventSourceType **ppSourceType);
  235.         //@method HRESULT | IEventSourceTypes | Remove | Remove a source type.
  236.         //@parm VARIANT * | pvarDesired | [in] Specifies the source type to remove.  This must be a GUID,
  237.         // converted to a string using the StringFromGUID2() function.
  238.         //@rvalue S_OK | Success.
  239.         //@rvalue S_FALSE | Success, the source didn't exist.
  240.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  241.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  242.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  243.         [helpstring("Remove a source type.")]
  244.         HRESULT Remove([in] VARIANT *pvarDesired);
  245.         //@method HRESULT | IEventSourceTypes | Count [propget] | Get the count of the source types.
  246.         //@parm long * | plCount | [out,retval] Receives the result.
  247.         //@rvalue S_OK | Success.
  248.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  249.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  250.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  251.         [helpstring("Get the count of the source types."),propget]
  252.         HRESULT Count([out,retval] long *plCount);
  253.         //@method HRESULT | IEventSourceTypes | _NewEnum [propget] | Get an enumerator for the source types.
  254.         //@parm IUnknown ** | ppUnkEnum | [out,retval] Receives the result, which is an object which
  255.         // implements IEnumVARIANT for enumerating the IEventSourceType interfaces of the event types in
  256.         // the collection.
  257.         //@rvalue S_OK | Success.
  258.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  259.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  260.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  261.         //@xref <i IEventSourceType>
  262.         [helpstring("Get an enumerator for the source types."),id(DISPID_NEWENUM),propget,hidden]
  263.         HRESULT _NewEnum([out,retval] IUnknown **ppUnkEnum);
  264. };
  265. //@doc EVENTS EXTERNAL
  266. /*
  267.         @interface IEventManager | Provides access to registered source types, and facilities for firing
  268.         events.
  269.         @meth HRESULT | SourceTypes [propget] | Get the source types.
  270.         @meth HRESULT | CreateSink | Creates an event sink from an event binding.
  271.         @xref <i IEventSourceTypes> <i IEventSourceType>
  272. */
  273. [
  274.         dual,
  275.         helpstring("Provides access to registered source types, and facilities for firing events."),
  276.         object,
  277.         oleautomation,
  278.         pointer_default(unique),
  279.         uuid(5f6012b0-a651-11d0-a9ea-00aa00685c74)
  280. ]
  281. interface IEventManager : IDispatch
  282. {
  283.         import "wtypes.idl";
  284.         import "ocidl.idl";
  285.         //@method HRESULT | IEventManager | SourceTypes [propget] | Get the source types.
  286.         //@parm IEventSourceTypes ** | ppSourceTypes | [out,retval] Receives the result.
  287.         //@rvalue S_OK | Success.
  288.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  289.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  290.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  291.         //@xref <i IEventSourceTypes> <i IEventSourceType> <i IEventType>
  292.         [helpstring("Get the source types."),propget]
  293.         HRESULT SourceTypes([out,retval] IEventSourceTypes **ppSourceTypes);
  294.         //@method HRESULT | IEventManager | CreateSink | Creates a sink for a binding.
  295.         //@parm IEventBinding * | pBinding | [in,unique] Specifies the binding to create the sink for.
  296.         //@parm IEventDeliveryOptions * | pDeliveryOptions | [in,unique] Specifies the options for firing
  297.         // the event to this sink.  If this value is NULL, then default options are used.
  298.         //@parm IUnknown ** | ppUnkSink | [out,retval] Receives the result.
  299.         //@rvalue S_OK | Success.
  300.         //@rvalue EVENTS_E_DISABLED | Failure, the binding is disabled.
  301.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  302.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  303.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  304.         [helpstring("Creates a sink for a binding.")]
  305.         HRESULT CreateSink([in,unique] IEventBinding *pBinding,
  306.                                            [in,unique] IEventDeliveryOptions *pDeliveryOptions,
  307.                                            [out,retval] IUnknown **ppUnkSink);
  308. };
  309. //@doc EVENTS INTERNAL
  310. /*
  311.         @interface IEventDatabasePlugin | Provides facilities for pluggable binding database stores.
  312.         @meth HRESULT | Database [propget] | Get the binding database.
  313.         @meth HRESULT | Database [propput] | Set the binding database.
  314.         @meth HRESULT | Database [propputref] | Set the binding database.
  315.         @meth HRESULT | Name [propget] | Get the name.
  316.         @meth HRESULT | Name [propput] | Set the name.
  317.         @meth HRESULT | Name [propputref] | Set the name.
  318.         @meth HRESULT | Parent [propget] | Get the parent.
  319.         @meth HRESULT | Parent [propput] | Set the parent.
  320.         @meth HRESULT | Parent [propputref] | Set the parent.
  321. */
  322. [
  323.         helpstring("Provides facilities for pluggable binding database stores."),
  324.         hidden,
  325.         object,
  326.         oleautomation,
  327.         pointer_default(unique),
  328.         uuid(4915fb10-af97-11d0-a9eb-00aa00685c74)
  329. ]
  330. interface IEventDatabasePlugin : IUnknown
  331. {
  332.         import "wtypes.idl";
  333.         import "ocidl.idl";
  334.         //@method HRESULT | IEventDatabasePlugin | Database [propget] | Get the binding database.
  335.         //@parm IEventPropertyBag ** | ppDatabase | [out,retval] Receives the result.
  336.         //@rvalue S_OK | Success.
  337.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  338.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  339.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  340.         [helpstring("Get the binding database."),propget]
  341.         HRESULT Database([out,retval] IEventPropertyBag **ppDatabase);
  342.         //@method HRESULT | IEventDatabasePlugin | Database [propput] | Set the binding database.
  343.         //@parm IEventPropertyBag * | pDatabase | [in] Specifies the binding database.
  344.         //@rvalue S_OK | Success.
  345.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  346.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  347.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  348.         [helpstring("Set the binding database."),propput]
  349.         HRESULT Database([in] IEventPropertyBag *pDatabase);
  350.         //@method HRESULT | IEventDatabasePlugin | Database [propputref] | Set the binding database.
  351.         //@parm IEventPropertyBag ** | ppDatabase | [in] Specifies the binding database.
  352.         //@rvalue S_OK | Success.
  353.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  354.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  355.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  356.         [helpstring("Set the binding database."),propputref]
  357.         HRESULT Database([in] IEventPropertyBag **ppDatabase);
  358.         //@method HRESULT | IEventDatabasePlugin | Name [propget] | Get the name.
  359.         //@parm BSTR * | pstrName | [out,retval] Receives the result.
  360.         //@rvalue S_OK | Success.
  361.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  362.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  363.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  364.         [helpstring("Get the name."),propget]
  365.         HRESULT Name([out,retval] BSTR *pstrName);
  366.         //@method HRESULT | IEventDatabasePlugin | Name [propput] | Set the name.
  367.         //@parm BSTR | strName | [in] Specifies the name.
  368.         //@rvalue S_OK | Success.
  369.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  370.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  371.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  372.         [helpstring("Set the name."),propput]
  373.         HRESULT Name([in] BSTR strName);
  374.         //@method HRESULT | IEventDatabasePlugin | Name [propputref] | Set the name.
  375.         //@parm BSTR * | pstrName | [in] Specifies the name.
  376.         //@rvalue S_OK | Success.
  377.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  378.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  379.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  380.         [helpstring("Set the name."),propputref]
  381.         HRESULT Name([in] BSTR *pstrName);
  382.         //@method HRESULT | IEventDatabasePlugin | Parent [propget] | Get the parent.
  383.         //@parm IEventPropertyBag ** | ppParent | [out,retval] Receives the result.
  384.         //@rvalue S_OK | Success.
  385.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  386.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  387.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  388.         [helpstring("Get the parent."),propget]
  389.         HRESULT Parent([out,retval] IEventPropertyBag **ppParent);
  390.         //@method HRESULT | IEventDatabasePlugin | Parent [propput] | Set the Parent.
  391.         //@parm IEventPropertyBag * | pDatabase | [in] Specifies the parent.
  392.         //@rvalue S_OK | Success.
  393.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  394.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  395.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  396.         [helpstring("Set the parent."),propput]
  397.         HRESULT Parent([in] IEventPropertyBag *pParent);
  398.         //@method HRESULT | IEventDatabasePlugin | Parent [propputref] | Set the parent.
  399.         //@parm IEventPropertyBag ** | ppDatabase | [in] Specifies the parent.
  400.         //@rvalue S_OK | Success.
  401.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  402.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  403.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  404.         [helpstring("Set the parent."),propputref]
  405.         HRESULT Parent([in] IEventPropertyBag **ppParent);
  406. };
  407. //@doc EVENTS EXTERNAL
  408. /*
  409.         @interface IEventDatabaseManager | Provides facilities for managing a binding database.
  410.         @meth HRESULT | CreateDatabase | Create a moniker for a database.
  411.         @meth HRESULT | EraseDatabase | Remove all of the information in a database.
  412.         @meth HRESULT | MakeVServerPath | Formats a service name and instance number into a complete path.
  413.         @meth HRESULT | MakeVRootPath | Formats a service name, instance number, and virtual root into a complete path.
  414. */
  415. [
  416.         helpstring("Provides facilities for managing a binding database."),
  417.         object,
  418.         oleautomation,
  419.         pointer_default(unique),
  420.         uuid(adc25b30-cbd8-11d0-a9f8-00aa00685c74)
  421. ]
  422. interface IEventDatabaseManager : IDispatch
  423. {
  424.         import "wtypes.idl";
  425.         import "ocidl.idl";
  426.         //@method HRESULT | IEventDatabaseManager | CreateDatabase | Create a moniker for a database.
  427.         //@parm BSTR | strPath | [in] Specifies the complete path to the database.
  428.         //@parm IUnknown ** | ppMonDatabase | [out,retval] Receives the moniker - this object implements the
  429.         // IMoniker interface.  Calling the moniker's IMoniker::BindToObject method yields an object which
  430.         // provides access to the database.
  431.         //@rvalue S_OK | Success.
  432.         //@rvalue S_FALSE | Success, the database already existed.
  433.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  434.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  435.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  436.         [helpstring("Create a moniker for a database.")]
  437.         HRESULT CreateDatabase([in] BSTR strPath, [out,retval] IUnknown **ppMonDatabase);
  438.         //@method HRESULT | IEventDatabaseManager | EraseDatabase | Remove all of the information in a
  439.         // database.
  440.         //@parm BSTR | strPath | [in] Specifies the complete path to the database.
  441.         //@rvalue S_OK | Success.
  442.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  443.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  444.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  445.         [helpstring("Remove all of the information in a database.")]
  446.         HRESULT EraseDatabase([in] BSTR strPath);
  447.         //@method HRESULT | IEventDatabaseManager | MakeVServerPath | Formats a service name and instance
  448.         // number into a complete path.
  449.         //@parm BSTR | strService | [in] Specifies the service name.
  450.         //@parm long | lInstance | [in] Specifies the service instance.
  451.         //@parm BSTR * | pstrPath | [out,retval] Receives the complete path.
  452.         //@rvalue S_OK | Success.
  453.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  454.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  455.         //@rvalue E_INVALIDARG | Failure, the strService is in a bad format, or lInstance is out of bounds.
  456.         [helpstring("Formats a service name and instance number into a complete path.")]
  457.         HRESULT MakeVServerPath([in] BSTR strService, [in] long lInstance, [out,retval] BSTR *pstrPath);
  458.         //@method HRESULT | IEventDatabaseManager | MakeVRootPath | Formats a service name, instance number,
  459.         // and virtual root into a complete path.
  460.         //@parm BSTR | strService | [in] Specifies the service name.
  461.         //@parm long | lInstance | [in] Specifies the service instance.
  462.         //@parm BSTR | strRoot | [in] Specifies the virtual root.
  463.         //@parm BSTR * | pstrPath | [out,retval] Receives the complete path.
  464.         //@rvalue S_OK | Success.
  465.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  466.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  467.         //@rvalue E_INVALIDARG | Failure, the strService or strRoot is in a bad format, or lInstance is out
  468.         // of bounds.
  469.         [helpstring("Formats a service name, virtual root, and instance number into a complete path.")]
  470.         HRESULT MakeVRootPath([in] BSTR strService, [in] long lInstance, [in] BSTR strRoot, [out,retval] BSTR *pstrPath);
  471. };
  472. //@doc EVENTS EXTERNAL
  473. /*
  474.         @interface IEventUtil | Provide's utility functions.
  475.         @meth HRESULT | DisplayNameFromMoniker | Get a monker's display name.
  476.         @meth HRESULT | MonikerFromDisplayName | Create a moniker from a display name.
  477.         @meth HRESULT | ObjectFromMoniker | Perform IMoniker::BindToObject.
  478.         @meth HRESULT | GetNewGUID | Create a new GUID.
  479.         @meth HRESULT | CopyPropertyBag | Copy an IEventPropertyBag in-depth.
  480.         @meth HRESULT | CopyPropertyBagShallow | Perform a shallow copy of an IEventPropertyBag
  481.         @meth HRESULT | DispatchFromObject | Perform QueryInterface for IID_IDispatch.
  482.         @meth HRESULT | GetIndexedGUID | Get an indexed GUID.
  483.         @meth HRESULT | RegisterSource | Register a new source.
  484. */
  485. [
  486.         helpstring("Provides utility functions."),
  487.         object,
  488.         oleautomation,
  489.         pointer_default(unique),
  490.         uuid(c61670e0-cd6e-11d0-a9f8-00aa00685c74)
  491. ]
  492. interface IEventUtil : IDispatch
  493. {
  494.         import "wtypes.idl";
  495.         import "ocidl.idl";
  496.         //@method HRESULT | IEventUtil | DisplayNameFromMoniker | Get a moniker's display name.
  497.         //@parm IUnknown * | pUnkMoniker | [in] Specifies the moniker.
  498.         //@parm BSTR * | pstrDisplayName | [out,retval] Receives the display name.
  499.         //@rvalue S_OK | Success.
  500.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  501.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  502.         //@rvalue E_NOINTERFACE | Failure, the object does not implement IMoniker.
  503.         [helpstring("Get a moniker's display name.")]
  504.         HRESULT DisplayNameFromMoniker([in] IUnknown *pUnkMoniker, [out,retval] BSTR *pstrDisplayName);
  505.         //@method HRESULT | IEventUtil | MonikerFromDisplayName | Create a moniker from a display name.
  506.         //@parm BSTR | strDisplayName | [in] Specifies the display name.
  507.         //@parm IUnknown ** | ppUnkMoniker | [out,retval] Receives the moniker.
  508.         //@rvalue S_OK | Success.
  509.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  510.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  511.         [helpstring("Create a moniker from a display name.")]
  512.         HRESULT MonikerFromDisplayName([in] BSTR strDisplayName, [out,retval] IUnknown **ppUnkMoniker);
  513.         //@method HRESULT | IEventUtil | ObjectFromMoniker | Perform IMoniker::BindToObject.
  514.         //@parm IUnknown * | pUnkMoniker | [in] Specifies the moniker.
  515.         //@parm IUnknown ** | ppUnkObject | [out,retval] Receives the object.
  516.         //@rvalue S_OK | Success.
  517.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  518.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  519.         [helpstring("Perform IMoniker::BindToObject.")]
  520.         HRESULT ObjectFromMoniker([in] IUnknown *pUnkMoniker, [out,retval] IUnknown **ppUnkObject);
  521.         //@method HRESULT | IEventUtil | GetNewGUID | Create a new GUID.
  522.         //@parm BSTR * | pstrGUID | [out,retval] Receives the new GUID.
  523.         //@rvalue S_OK | Success.
  524.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  525.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  526.         [helpstring("Create a new GUID.")]
  527.         HRESULT GetNewGUID([out,retval] BSTR *pstrGUID);
  528.         //@method HRESULT | IEventUtil | CopyPropertyBag | Copy an IEventPropertyBag in-depth.  The result
  529.         // is implemented with an in-memory object.
  530.         //@parm IUnknown * | pUnkInput | [in] Specifies the input.
  531.         //@parm IUnknown ** | ppUnkOutput | [out,retval] Receives the result.
  532.         //@rvalue S_OK | Success.
  533.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  534.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  535.         [helpstring("Copy an IEventPropertyBag in-depth.")]
  536.         HRESULT CopyPropertyBag([in] IUnknown *pUnkInput, [out,retval] IUnknown **ppUnkOutput);
  537.         //@method HRESULT | IEventUtil | CopyPropertyBagShallow | Perform a shallow copy of an
  538.         // IEventPropertyBag.  The result is implemented with an in-memory object.
  539.         //@parm IUnknown * | pUnkInput | [in] Specifies the input.
  540.         //@parm IUnknown ** | ppUnkOutput | [out,retval] Receives the result.
  541.         //@rvalue S_OK | Success.
  542.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  543.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  544.         [helpstring("Perform a shallow copy of an IEventPropertyBag.")]
  545.         HRESULT CopyPropertyBagShallow([in] IUnknown *pUnkInput, [out,retval] IUnknown **ppUnkOutput);
  546.         //@method HRESULT | IEventUtil | DispatchFromObject | Perform QueryInterface for IID_IDispatch.
  547.         //@parm IUnknown * | pUnkObject | [in] Specifies the object.
  548.         //@parm IDispatch ** | ppDispOutput | [out,retval] Receives the result.
  549.         //@rvalue S_OK | Success.
  550.         //@rvalue E_NOINTERFACE | Failure, the object does not support IDispatch.
  551.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  552.         [helpstring("Perform QueryInterface for IID_IDispatch.")]
  553.         HRESULT DispatchFromObject([in] IUnknown *pUnkObject, [out,retval] IDispatch **ppDispOutput);
  554.         //@method HRESULT | IEventUtil | GetIndexedGUID | Get an indexed GUID.  For a given base GUID and
  555.         // index, this method will always return the same (unique) GUID.
  556.         //@parm BSTR | strGUID | [in] Specifies the base GUID.
  557.         //@parm long | lValue | [in] Specifies the index.
  558.         //@parm BSTR * | pstrResult | [out,retval] Receives the result.
  559.         //@rvalue S_OK | Success.
  560.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  561.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  562.         [helpstring("Get an indexed GUID.")]
  563.         HRESULT GetIndexedGUID([in] BSTR strGUID, [in] long lValue, [out,retval] BSTR *pstrResult);
  564.         //@method HRESULT | IEventUtil | RegisterSource | Register a new source.
  565.         //@parm BSTR | strSourceType | [in] Specifies the GUID of the Source Type for the new Source.
  566.         //@parm BSTR | strSource | [in] Specifies the GUID of the new Source.  If lIndex is -1 then this
  567.         // parameter is the actual GUID.  Otherwise, this parameter is the base GUID, and
  568.         // IEventUtil::GetIndexGUID is used the generate the actual GUID.
  569.         //@parm long | lInstance | [in] Specifies the instance of the GUID.  See the strDatabaseManager
  570.         // parameter for how this parameter is used.
  571.         //@parm BSTR | strService | [in] Specifies the service name of the new Source.  This is used as a
  572.         // parameter to either IEventDatabaseManager::MakeVRootPath or IEventDatabaseManager::MakeVServerPath.
  573.         //@parm BSTR | strVRoot | [in] Specifies the virtual root of the new Source.  If this parameter is
  574.         // a zero-length string or is NULL, then no virtual root is used.
  575.         //@parm BSTR | strDatabaseManager | [in] Specifies the GUID or ProgID of the object which implements
  576.         // IEventDatabaseManager for generating the path of the binding database for the new Source.  If the
  577.         // strVRoot parameter is specifies, then IEventDatabaseManager::MakeVRootPath is used - otherwise,
  578.         // IEventDatabaseManager::MakeVServerPath is used.
  579.         //@parm BSTR | strDisplayName | [in] Specifies the Display Name for the new Source.
  580.         //@parm IEventBindingManager ** | ppBindingManager | [out,retval,unique] Receives the
  581.         // IEventBindingManager interface for the object which stores the bindings for the new Source.  This
  582.         // parameter may not be NULL - the output must be accepted.
  583.         // this parameter is NULL, then the interface is not returned.
  584.         //@rvalue S_OK | Success.
  585.         //@rvalue SEO_E_NOTPRESENT | Failure, the Source Type is not registered.
  586.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  587.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  588.         //@rvalue E_ACCESSDENIED | Failure, access denied.
  589.         [helpstring("Register a new source.")]
  590.         HRESULT RegisterSource([in] BSTR strSourceType,
  591.                                                    [in] BSTR strSource,
  592.                                                    [in] long lInstance,
  593.                                                    [in] BSTR strService,
  594.                                                    [in] BSTR strVRoot,
  595.                                                    [in] BSTR strDatabaseManager,
  596.                                                    [in] BSTR strDisplayName,
  597.                                                    [out,retval] IEventBindingManager **ppBindingManager);
  598. };
  599. //@doc EVENTS EXTERNAL
  600. /*
  601.         @interface IEventComCat | Provides access to component categories.
  602.         @meth HRESULT | RegisterCategory | Register a component category.
  603.         @meth HRESULT | UnRegisterCategory | Unregister a component category.
  604.         @meth HRESULT | RegisterClassImplementsCategory | Register a class as implementing a component category.
  605.         @meth HRESULT | UnRegisterClassImplementsCategory | Unregister a class as implementing a component category.
  606.         @meth HRESULT | RegisterClassRequiresCategory | Register a class as requiring a component category.
  607.         @meth HRESULT | UnRegisterClassRequiresCategory | Unregister a class as requiring a component category.
  608.         @meth HRESULT | GetCategories | Get the registered component categories.
  609.         @meth HRESULT | GetCategoryDescription | Get the description for a component category.
  610. */
  611. [
  612.         helpstring("Provides access to component categories."),
  613.         object,
  614.         oleautomation,
  615.         pointer_default(unique),
  616.         uuid(65a70ec0-cd87-11d0-a9f8-00aa00685c74)
  617. ]
  618. interface IEventComCat : IDispatch
  619. {
  620.         import "wtypes.idl";
  621.         import "ocidl.idl";
  622.         //@method HRESULT | IEventComCat | RegisterCategory | Register a component category.
  623.         //@parm BSTR | pszCategory | [in] Specifies the component category.
  624.         //@parm BSTR | pszDescription | [in] Specifies the description.
  625.         //@parm long | lcidLanguage | [in] Specifies the LCID of the description.  This should be 0 for
  626.         // LOCALE_NEUTRAL, 1024 for LOCALE_USER_DEFAULT, or 2048 for LOCALE_SYSTEM_DEFAULT - or some other
  627.         // language-specific value.
  628.         //@rvalue S_OK | Success.
  629.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  630.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  631.         [helpstring("Register a component category.")]
  632.         HRESULT RegisterCategory([in] BSTR pszCategory, [in] BSTR pszDescription, [in] long lcidLanguage);
  633.         //@method HRESULT | IEventComCat | UnRegisterCategory | Unregister a component category.
  634.         //@parm BSTR | pszCategory | [in] Specifies the component category.
  635.         //@rvalue S_OK | Success.
  636.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  637.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  638.         [helpstring("Unregister a component category.")]
  639.         HRESULT UnRegisterCategory([in] BSTR pszCategory);
  640.         //@method HRESULT | IEventComCat | RegisterClassImplementsCategory | Register a class as implementing
  641.         // a component category.
  642.         //@parm BSTR | pszClass | [in] Specifies the class.
  643.         //@parm BSTR | pszCategory | [in] Specifies the component category.
  644.         //@rvalue S_OK | Success.
  645.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  646.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  647.         [helpstring("Register a class as implementing a component category.")]
  648.         HRESULT RegisterClassImplementsCategory([in] BSTR pszClass, [in] BSTR pszCategory);
  649.         //@method HRESULT | IEventComCat | UnRegisterClassImplementsCategory | Unregister a class as
  650.         // implementing a component category.
  651.         //@parm BSTR | pszClass | [in] Specifies the class.
  652.         //@parm BSTR | pszCategory | [in] Specifies the category.
  653.         //@rvalue S_OK | Success.
  654.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  655.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  656.         [helpstring("Unregister a class as implementing a component category.")]
  657.         HRESULT UnRegisterClassImplementsCategory([in] BSTR pszClass, [in] BSTR pszCategory);
  658.         //@method HRESULT | IEventComCat | RegisterClassRequiresCategory | Register a class as requiring a
  659.         // component category.
  660.         //@parm BSTR | pszClass | [in] Specifies the class.
  661.         //@parm BSTR | pszCategory | [in] Specifies the category.
  662.         //@rvalue S_OK | Success.
  663.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  664.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  665.         [helpstring("Register a class as requiring a component category.")]
  666.         HRESULT RegisterClassRequiresCategory([in] BSTR pszClass, [in] BSTR pszCategory);
  667.         //@method HRESULT | IEventComCat | UnRegisterClassRequiresCategory | Unregister a class as requiring
  668.         // a component category.
  669.         //@parm BSTR | pszClass | [in] Specifies the class.
  670.         //@parm BSTR | pszCategory | [in] Specifies the category.
  671.         //@rvalue S_OK | Success.
  672.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  673.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  674.         [helpstring("Unregister a class as requiring a component category.")]
  675.         HRESULT UnRegisterClassRequiresCategory([in] BSTR pszClass, [in] BSTR pszCategory);
  676.         //@method HRESULT | IEventComCat | GetCategories | Get the registered component categories.
  677.         //@parm SAFEARRAY(VARIANT) * | psaCategories | [out,retval] Receives the list of registered component
  678.         // categories.
  679.         //@rvalue S_OK | Success.
  680.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  681.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  682.         [helpstring("Get the registered component categories.")]
  683.         HRESULT GetCategories([out,retval] SAFEARRAY(VARIANT) *psaCategories);
  684.         //@method HRESULT | IEventComCat | GetCategoryDescription | Get the description for a component category.
  685.         //@parm BSTR | pszCategory | [in] Specifies the category.
  686.         //@parm long | lcidLanguage | [in] Specifies the desired LCID of the description.  This should be 0
  687.         // for LOCALE_NEUTRAL, 1024 for LOCALE_USER_DEFAULT, or 2048 for LOCALE_SYSTEM_DEFAULT - or some
  688.         // other language-specific value.
  689.         //@parm BSTR * | pstrDescription | [out,retval] Receives the description.
  690.         //@rvalue S_OK | Success.
  691.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  692.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  693.         //@rvalue CAT_E_CATIDNOEXIST | Failure, the category does not exist.
  694.         //@rvalue CAT_E_NODESCRIPTION | Failure, there is not description string for the specified locale.
  695.         [helpstring("Get the description for a component category.")]
  696.         HRESULT GetCategoryDescription([in] BSTR pszCategory, [in] long lcidLanguage, [out,retval] BSTR *pstrDescription);
  697. };
  698. //@doc EVENTS INTERNAL
  699. /*
  700.         @interface IEventNotifyBindingChange | Receives notifications of changes to a binding database.
  701.         @meth HRESULT | OnChange | Called when a change occurs.
  702.         @xref <i IEventNotifyBindingChangeDisp>
  703. */
  704. [
  705.         helpstring("Receives notifications of changes to a binding database."),
  706.         hidden,
  707.         object,
  708.         pointer_default(unique),
  709.         uuid(08f4f2a0-dc5b-11d0-aa0f-00aa006bc80b)
  710. ]
  711. interface IEventNotifyBindingChange : IUnknown
  712. {
  713.         //@method HRESULT | IEventNotifyBindingChange | OnChange | Called when a change occurs.
  714.         //@rvalue S_OK | Success.
  715.         [helpstring("Called when a change occurs.")]
  716.         HRESULT OnChange();
  717. };
  718. //@doc EVENTS INTERNAL
  719. /*
  720.         @interface IEventNotifyBindingChangeDisp | Receives notifications of changes to a binding database (IDispatch).
  721.         @meth HRESULT | OnChange | Called when a change occurs.
  722.         @xref <i IEventNotifyBindingChange>
  723. */
  724. [
  725.         dual,
  726.         helpstring("Receives notifications of changes to a binding database."),
  727.         hidden,
  728.         object,
  729.         pointer_default(unique),
  730.         uuid(dc3d83b0-e99f-11d0-aa10-00aa006bc80b)
  731. ]
  732. interface IEventNotifyBindingChangeDisp : IDispatch
  733. {
  734.         //@method HRESULT | IEventNotifyBindingChangeDisp | OnChange | Called when a change occurs.
  735.         //@rvalue S_OK | Success.
  736.         [helpstring("Called when a change occurs."),id(1)]
  737.         HRESULT OnChange();
  738. };
  739. //@doc SEO
  740. /*
  741.         @interface ISEOInitObject | Same interface as IPersistPropertyBag but uses shallow binding.
  742. */
  743. [
  744.         helpstring("Same interface as IPersistPropertyBag but uses shallow binding."),
  745.         hidden,
  746.         object,
  747.         pointer_default(unique),
  748.         uuid(9bb6aab0-af6d-11d0-8bd2-00c04fd42e37)
  749. ]
  750. interface ISEOInitObject : IPersistPropertyBag
  751. {
  752.         // No methods (uses IPersistPropertyBag methods).
  753. };
  754. //@doc EVENTS EXTERNAL
  755. /*
  756.         @interface IEventRuleEngine | Evaluates events against rules.
  757.         @meth HRESULT | Evaluate | Evaluate the event against the rule.
  758. */
  759. [
  760.         helpstring("Evaluates events against rules."),
  761.         object,
  762.         pointer_default(unique),
  763.         uuid(da816090-f343-11d0-aa14-00aa006bc80b)
  764. ]
  765. interface IEventRuleEngine : IUnknown
  766. {
  767.         import "wtypes.idl";
  768.         import "ocidl.idl";
  769.         //@method HRESULT | IEventRuleEngine | Evaluate | Evaluate the event against the rule.
  770.         //@parm IEventPropertyBag | pEvent | [in] Specifies the event.
  771.         //@rvalue S_OK | Success, the rule evaluated to TRUE.
  772.         //@rvalue S_FALSE | Success, the rule evaluated to FALSE.
  773.         //@xref <i IEventPropertyBag>
  774.         [helpstring("Evaluate the event against the rule.")]
  775.         HRESULT Evaluate([in,unique] IUnknown *pEvent);
  776. };
  777. //@doc EVENTS EXTERNAL
  778. /*
  779.         @interface IEventPersistBinding | Persists an object to/from a binding.  This interface derives from IPersist.
  780.         @meth HRESULT | IsDirty | Checks the object for changes since it was last saved.
  781.         @meth HRESULT | Load | Initializes an object from the binding where it was previously saved.
  782.         @meth HRESULT | Save | Saves an object to the specified binding.
  783. */
  784. [
  785.         helpstring("Persists an object to/from a binding."),
  786.         object,
  787.         pointer_default(unique),
  788.         uuid(e9311660-1a98-11d1-aa26-00aa006bc80b)
  789. ]
  790. interface IEventPersistBinding : IPersist
  791. {
  792.         import "wtypes.idl";
  793.         import "ocidl.idl";
  794.         //@method HRESULT | IEventPersistBinding | IsDirty | Checks the object for changes since it was last saved.
  795.         //@rvalue S_OK | Success, the object has changed since the last time it was saved.
  796.         //@rvalue S_FALSE | Success, the object has not changed since the last time it was saved.
  797.         [helpstring("Checks the object for changes since it was last saved.")]
  798.         HRESULT IsDirty();
  799.         //@method HRESULT | IEventPersistBinding | Load | Initializes an object from the binding where it was previously saved.
  800.         //@parm IEventBinding * | piBinding | [in] Specifies the binding to load from.
  801.         //@rvalue S_OK | Success, the object successfully initialized itself.
  802.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  803.         [helpstring("Initializes an object from the binding where it was previously saved.")]
  804.         HRESULT Load([in] IEventBinding *piBinding);
  805.         //@method HRESULT | IEventPersistBinding | Save | Saves an object to the specified binding.
  806.         //@parm IEventBinding * | piBinding | [in] Specifies the binding to save to.
  807.         //@parm VARIANT_BOOL | fClearDirty | [in] Specifies whether or not the object should clear its dirty flag.
  808.         //@rvalue S_OK | Success, the object successfully saved itself.
  809.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  810.         [helpstring("Saves an object to the specified binding.")]
  811.         HRESULT Save([in] IEventBinding * piBinding, [in] VARIANT_BOOL fClearDirty);
  812. };
  813. //@doc EVENTS EXTERNAL
  814. /*
  815.         @interface IEventSinkNotify | Generic sink interface.
  816.         @meth HRESULT | OnEvent | Called when the event happens.
  817. */
  818. [
  819.         helpstring("Generic sink interface."),
  820.         object,
  821.         pointer_default(unique),
  822.         uuid(bdf065b0-f346-11d0-aa14-00aa006bc80b)
  823. ]
  824. interface IEventSinkNotify : IUnknown
  825. {
  826.         import "wtypes.idl";
  827.         import "ocidl.idl";
  828.         //@method HRESULT | IEventSinkNotify | OnEvent | Called when the event happens.
  829.         //@rvalue S_OK | Success, the rule evaluated to TRUE.
  830.         [helpstring("Called when the event happens."),id(DISPID_VALUE)]
  831.         HRESULT OnEvent();
  832. };
  833. //@doc EVENTS EXTERNAL
  834. /*
  835.         @interface IEventSinkNotifyDisp | Generic sink interface (IDispatch).
  836.         @meth HRESULT | OnEvent | Called when the event happens.
  837. */
  838. [
  839.         helpstring("Generic sink interface (IDispatch)."),
  840.         object,
  841.         pointer_default(unique),
  842.         uuid(33a79660-f347-11d0-aa14-00aa006bc80b)
  843. ]
  844. interface IEventSinkNotifyDisp : IDispatch
  845. {
  846.         import "wtypes.idl";
  847.         import "ocidl.idl";
  848.         //@method HRESULT | IEventSinkNotifyDisp | OnEvent | Called when the event happens.
  849.         //@rvalue S_OK | Success, the rule evaluated to TRUE.
  850.         [helpstring("Called when the event happens."),id(DISPID_VALUE)]
  851.         HRESULT OnEvent();
  852. };
  853. //@doc EVENTS EXTERNAL
  854. /*
  855.         @interface IEventIsCacheable | Determine whether or not the object should be cached.
  856.         @meth HRESULT | IsCacheable | Determine whether or not the object should be cached.
  857. */
  858. [
  859.         helpstring("Determine whether or not the object should be cached"),
  860.         object,
  861.         pointer_default(unique),
  862.         uuid(22e0f830-1e81-11d1-aa29-00aa006bc80b)
  863. ]
  864. interface IEventIsCacheable : IUnknown
  865. {
  866.         import "wtypes.idl";
  867.         import "ocidl.idl";
  868.         //@method HRESULT | IEventIsCacheable | IsCacheable | Determine whether or not the object should be cached
  869.         //@rvalue S_OK | Success, the object should be cached.
  870.         //@rvalue S_FALSE | Success, the object should not be cached.
  871.         [helpstring("Determine whether or not the object should be cached")]
  872.         HRESULT IsCacheable();
  873. };
  874. //@doc EVENTS EXTERNAL
  875. /*
  876.         @interface IEventCreateOptions | Provide options for creating objects.  Objects implementating this
  877.          interface may be passed as the pDeliveryOptions parameter to IEventManager::CreateSink, so that
  878.          operations during the object creation may be overridden.
  879.         @meth HRESULT | CreateBindCtx | Override the Win32 CreateBindCtx function.
  880.         @meth HRESULT | MkParseDisplayName | Override the Win32 MkParseDisplayName function.
  881.         @meth HRESULT | BindToObject | Override the IMoniker:BindToObject method.
  882.         @meth HRESULT | CoCreateInstance | Override the Win32 CoCreateInstance function.
  883.         @meth HRESULT | Init | Override initialization.
  884. */
  885. [
  886.         helpstring("Provide options for creating objects."),
  887.         hidden,
  888.         object,
  889.         pointer_default(unique),
  890.         uuid(c0287bfe-ef7f-11d1-9fff-00c04fa37348)
  891. ]
  892. interface IEventCreateOptions : IEventDeliveryOptions
  893. {
  894.         //@method HRESULT | IEventCreateOptions | CreateBindCtx | Override the Win32 CreateBindCtx function.
  895.         // By implementating this method, the object can provide its own IBindCtx for use during object
  896.         // creation.  See the documentation for the Win32 CreateBindCtx function for more information.
  897.         //@parm DWORD | dwReserved | [in] Reserved.  Must be 0.
  898.         //@parm IBindCtx ** | ppBindCtx | [out] Receives the result.
  899.         //@rvalue SUCCEEDED() | Success.
  900.         //@rvalue E_NOTIMPL | Not implemented.  The caller should call the Win32 CreateBindCtx function.
  901.         //@rvalue FAILED() | Failure.
  902.         [helpstring("Override the Win32 CreateBindCtx function.")]
  903.         HRESULT CreateBindCtx([in] DWORD dwReserved, [out] IBindCtx **ppBindCtx);
  904.         //@method HRESULT | IEventCreateOptions | MkParseDisplayName | Override the Win32 MkParseDisplayName
  905.         // function.  By implementing this method, the object can perform its own logic for converting a
  906.         // display name into an IMoniker interface during object creation.  See the documentation for the
  907.         // Win32 MkParseDisplayName function for more information.
  908.         //@parm IBindCtx * | pBindCtx | [in] Specifies the bind context.
  909.         //@parm LPCOLESTR | pszUserName | [in] Specifes the display name.
  910.         //@parm ULONG * | pchEaten | [out] Receives the number of characters consumed from the display name.
  911.         //@parm IMoniker ** | ppMoniker | [out] Receives the result.
  912.         //@rvalue SUCCEEDED() | Success.
  913.         //@rvalue E_NOTIMPL | Not implemented.  The caller should call the Win32 MkParseDisplayName function.
  914.         //@rvalue FAILED() | Failure.
  915.         [helpstring("Override the Win32 MkParseDisplayName function.")]
  916.         HRESULT MkParseDisplayName([in] IBindCtx *pBindCtx,
  917.                                                            [in] LPCOLESTR pszUserName,
  918.                                                            [out] ULONG * pchEaten,
  919.                                                            [out] LPMONIKER *ppMoniker);
  920.         //@method HRESULT | IEventCreateOptions | BindToObject | Override the IMoniker::BindToObject method.
  921.         // By implementing this method, the object can perform its own logic for binding a moniker to an
  922.         // object during object creation.  See the documentation for IMoniker::BindToObject for more
  923.         // information.
  924.         //@parm IMoniker * | pMoniker | [in] Specifies the moniker to bind.
  925.         //@parm IBindCtx * | pBindCtx | [in[ Specifies the bind context.
  926.         //@parm IMoniker * | pmkLeft | [in] Specifies the moniker to the left.
  927.         //@parm REFIID | riidResult | [in] Specifies the desired interface on the object.
  928.         //@parm LPVOID * | ppvResult | [out,iid_is(riidResult)] Receives the result.
  929.         //@rvalue SUCCEEDED() | Success.
  930.         //@rvalue E_NOTIMPL | Not implemented.  The caller should call the moniker's IMoniker::BindToObject
  931.         // method.
  932.         //@rvalue FAILED() | Failure.
  933.         [helpstring("Override the IMoniker::BindToObject method.")]
  934.         HRESULT BindToObject([in] IMoniker *pMoniker,
  935.                                                  [in] IBindCtx *pBindCtx,
  936.                                                  [in] IMoniker *pmkLeft,
  937.                                                  [in] REFIID riidResult,
  938.                                                  [out,iid_is(riidResult)] LPVOID *ppvResult);
  939.         //@method HRESULT | IEventCreateOptions | CoCreateInstance | Override the Win32 CoCreateInstance
  940.         // function.  By implementing this method, the object can perform its own logic for creating an
  941.         // object.  See the documentation for the Win32 CoCreateInstance function for more information.
  942.         //@parm REFCLSID | rclsidDesired | [in] Specifies the CLSID of the object to create.
  943.         //@parm IUnkown * | pUnkOuter | [in] Specifies the outer unknown which is aggregating the new object.
  944.         //@parm DWORD | dwClsCtx | [in] Specifies the creation context.
  945.         //@parm REFIID | riidResult | [in] Specifies the IID of the interface which to be returned.
  946.         //@parm LPVOID * | ppvResult | [out,iid_is(riidResult)] Receives the result.
  947.         //@rvalue SUCCEEDED() | Success.
  948.         //@rvalue E_NOTIMPL | Not implemented.  The caller should call the Win32 CoCreateInstance function.
  949.         //@rvalue FAILED() | Failure.
  950.         [helpstring("Override the Win32 CoCreateInstance function.")]
  951.         HRESULT CoCreateInstance([in] REFCLSID rclsidDesired,
  952.                                                          [in] IUnknown *pUnkOuter,
  953.                                                          [in] DWORD dwClsCtx,
  954.                                                          [in] REFIID riidResult,
  955.                                                          [out,iid_is(riidResult)] LPVOID *ppvResult);
  956.         //@method HRESULT | IEventCreateOptions | Init | Override the initialization.  By implementing this
  957.         // method, the object can perform its own logic to initialize the object.
  958.         //@parm REFIID | riidObject | [in] Specifies the IID of the interface on the object.
  959.         //@parm IUnknown ** | ppUnkObject | [in,out,iid_is(riidObject)] Specifies the object.  The method
  960.         // can cause a different object to be used by placing it in this output parameter.
  961.         //@parm IEventBinding * | pBinding | [in,unique] Specifies the binding for which the object is being
  962.         // created.  May be NULL.
  963.         //@parm IUnknown * | pInitProps | [in,unique] Specifies additional initialization parameters.  May be
  964.         // NULL.
  965.         //@rvalue SUCCEEDED() | Success.  The caller should not invoke its own initialization logic for the
  966.         // object.
  967.         //@rvalue E_NOTIMPL | Not implemented.  The caller should invoke its own initialization logic.  Note
  968.         // that even if this value it returned, the method may still have placed a different interface
  969.         // pointer into *ppUnkObject.
  970.         //@rvalue FAILED() | Failure.
  971.         [helpstring("Override the object initialization.")]
  972.         HRESULT Init([in] REFIID riidObject,
  973.                                  [in,out,iid_is(riidObject)] IUnknown **ppUnkObject,
  974.                                  [in,unique] IEventBinding *pBinding,
  975.                                  [in,unique] IUnknown *pInitProps);
  976. };
  977. //@doc EVENTS EXTERNAL
  978. /*
  979.         @interface IEventDispatcherChain | Provide chaining of dispatcher instances.
  980.         @meth HRESULT | SetPrevious | Set the previous dispatcher.
  981. */
  982. [
  983.         helpstring("Provide chaining of dispatcher instances."),
  984.         hidden,
  985.         object,
  986.         pointer_default(unique),
  987.         uuid(58a90754-fb15-11d1-a00c-00c04fa37348)
  988. ]
  989. interface IEventDispatcherChain : IUnknown
  990. {
  991.         //@method HRESULT | IEventDispatcherChain | SetPrevious | Set the previous dispatcher.  During
  992.         // a binding change notification, if the old dispatcher supports the IClassFactory interface
  993.         // the router will use the old dispatcher to create a new dispatcher.  Once the new dispatcher
  994.         // is created, before the router calls the new dispatcher's IEventDispatcher::SetContext method,
  995.         // if the new dispatcher supports IEventDispatcherChain, the router will call the new dispatcher's
  996.         // IEventDispatcherChain::SetPrevious method, passing in the interface pointer of the old
  997.         // dispatcher - this gives the new dispatcher an opportunity to cooperate with the old
  998.         // dispatcher during a binding change notification.  The new dispatcher may also return an
  999.         // enumerator for the event types which the router should preload into the new dispatcher.
  1000.         //@parm IUnknown * | pUnkPrevious | [in] Specifies the old dispatcher.
  1001.         //@parm IUnknown ** | ppUnkPreload | [out] Receives an interface pointer for preloading.  If this
  1002.         // object is non-NULL and implements IEnumGUID, the router will (attempt to) immediately call
  1003.         // IEventDispatcher::SetContext for each event type returned by IEnumGUID::Next.  (The router may
  1004.         // not be able to make the call immediately due to locks held on the binding database - in this
  1005.         // case, the router will hold the IEnumGUID interface, and will make the SetContext calls the next
  1006.         // time the server calls one of the IEventRouter::GetDispatcher... methods.)
  1007.         //@rvalue S_OK | Success.
  1008.         //@rvalue E_NOTIMPLE | Not implemented.
  1009.         [helpstring("Set the previous dispatcher.")]
  1010.         HRESULT SetPrevious([in] IUnknown *pUnkPrevious, [out] IUnknown **ppUnkPreload);
  1011. };
  1012. [
  1013.         helpstring("Server Extension Objects COM Library"),
  1014.         uuid(bbf0fc10-2238-11d0-a9ce-00aa00685c74),
  1015.         version(1.0)
  1016. ]
  1017. library SEOLib
  1018. {
  1019.         importlib("stdole2.tlb");
  1020.         interface ISEODictionaryItem;
  1021.         interface ISEODictionary;
  1022.         interface IEventLock;
  1023.         interface ISEORouter;
  1024.         interface IMCISMessageFilter;
  1025.         interface ISEOBindingRuleEngine;
  1026.         interface ISEOEventSink;
  1027.         interface ISEORegDictionary;
  1028.         interface ISEOBindingConverter;
  1029.         interface ISEODispatcher;
  1030.         interface IEventDeliveryOptions;
  1031.         interface IEventTypeSinks;
  1032.         interface IEventType;
  1033.         interface IEventPropertyBag;
  1034.         interface IEventBinding;
  1035.         interface IEventBindings;
  1036.         interface IEventTypes;
  1037.         interface IEventBindingManager;
  1038.         interface IEventSource;
  1039.         interface IEventSources;
  1040.         interface IEventSourceType;
  1041.         interface IEventSourceTypes;
  1042.         interface IEventManager;
  1043.         interface ISEOInitObject;
  1044.         interface IEventDatabasePlugin;
  1045.         interface IEventDatabaseManager;
  1046.         interface IEventUtil;
  1047.         interface IEventComCat;
  1048.         interface IEventNotifyBindingChange;
  1049.         interface IEventNotifyBindingChangeDisp;
  1050.         interface IEventRouter;
  1051.         interface IEventDispatcher;
  1052.         interface IEventRuleEngine;
  1053.         interface IEventSinkNotify;
  1054.         interface IEventSinkNotifyDisp;
  1055.         interface IEventPersistBinding;
  1056.         interface IEventIsCacheable;
  1057.         interface IEventCreateOptions;
  1058.         interface IEventDispatcherChain;
  1059. //@doc SEO
  1060.         //@const HRESULT | SEO_S_MOREDATA | Success, the buffer was not large enough to contain all of the data.
  1061.         const DWORD SEO_S_MOREDATA                      = 0x00041001;   // Equal to MAKE_HRESULT(SEVERITY_SUCCESS,FACILITY_ITF,0x1001)
  1062.         //@const HRESULT | SEO_E_NOTPRESENT | Failure, the item is not present.
  1063.         const DWORD SEO_E_NOTPRESENT            = 0x80041002;   // Equal to MAKE_HRESULT(SEVERITY_FAILURE,FACITILY_ITF,0x1002)
  1064.         //@const HRESULT | SEO_E_TIMEOUT | Failure, the timeout expired.
  1065.         const DWORD SEO_E_TIMEOUT                       = 0x80041003;   // Equal to MAKE_HRESULT(SEVERITY_FAILURE,FACITILY_ITF,0x1003)
  1066.         //@const HRESULT | SEO_S_DONEPROCESSING | Success, the message should not be handed to any other
  1067.         // extension objects at this binding point.
  1068.         const DWORD SEO_S_DONEPROCESSING        = 0x80041004;   // Equal to MAKE_HRESULT(SEVERITY_SUCCESS,FACILITY_ITF,0x1004)
  1069. //@doc EVENTS EXTERNAL
  1070.         //@const HRESULT | EVENTS_E_BADATA | Failure, bad data was presented.
  1071.         const DWORD EVENTS_E_BADDATA            = 0x80041005;   // Equal to MAKE_HRESULT(SEVERITY_FAILURE,FACILITY_ITF,0x1005)
  1072.         //@const HRESULT | EVENTS_E_TIMEOUT | Failure, the timeout expired.
  1073.         const DWORD EVENTS_E_TIMEOUT            = 0x80041006;   // Equal to MAKE_HRESULT(SEVERITY_FAILURE,FACILITY_ITF,0x1006)
  1074.         //@const HRESULT | EVENTS_E_DISABLED | Failure, the binding is disabled.
  1075.         const DWORD EVENTS_E_DISABLED           = 0x80041007;   // Equal to MAKE_HRESULT(SEVERITY_FAILURE,FACILITY_ITF,0x1007)
  1076. //@doc SEO
  1077.         [
  1078.                 control,
  1079.                 helpstring("Class which implements an ISEODictionary in the registry."),
  1080.                 hidden,
  1081.                 uuid(c4df0040-2d33-11d0-a9cf-00aa00685c74),
  1082.                 version(1.0)
  1083.         ]
  1084.         coclass CSEORegDictionary
  1085.         {
  1086.                 [default] interface ISEODictionary;
  1087.         }
  1088. //@doc SEO
  1089.         [
  1090.                 control,
  1091.                 helpstring("Class which wraps MimeOle with an ISEODictionary."),
  1092.                 hidden,
  1093.                 uuid(c4df0041-2d33-11d0-a9cf-00aa00685c74),
  1094.                 version(1.0)
  1095.         ]
  1096.         coclass CSEOMimeDictionary
  1097.         {
  1098.                 [default] interface ISEODictionary;
  1099.         }
  1100. //@doc SEO
  1101.         [
  1102.                 control,
  1103.                 helpstring("Class provides an ISEODictionary in memory."),
  1104.                 hidden,
  1105.                 uuid(c4df0042-2d33-11d0-a9cf-00aa00685c74),
  1106.                 version(1.0)
  1107.         ]
  1108.         coclass CSEOMemDictionary
  1109.         {
  1110.                 [default] interface ISEODictionary;
  1111.                 interface IPropertyBag;
  1112.                 interface IEventPropertyBag;
  1113.         }
  1114. //@doc SEO
  1115.         [
  1116.                 control,
  1117.                 helpstring("Class provides an ISEODictionary on the Metabase."),
  1118.                 hidden,
  1119.                 uuid(c4df0043-2d33-11d0-a9cf-00aa00685c74),
  1120.                 version(1.0)
  1121.         ]
  1122.         coclass CSEOMetaDictionary
  1123.         {
  1124.                 interface ISEODictionary;
  1125.                 interface ISEOInitObject;
  1126.                 interface IPropertyBag;
  1127.                 [default] interface IEventPropertyBag;
  1128.                 interface IEventLock;
  1129.         }
  1130. //@doc SEO
  1131.         //@object CSEODictionaryItem | Provides an ISEODictionaryItem in memory.
  1132.         //@supint ISEODictionaryItem | General-purpose access to a single dictionary item.
  1133.         //@xref <i ISEODictionary>
  1134.         [
  1135.                 control,
  1136.                 helpstring("Class provides an ISEODictionaryItem in memory."),
  1137.                 hidden,
  1138.                 uuid(2e3a0ec0-89d7-11d0-a9e6-00aa00685c74),
  1139.                 version(1.0)
  1140.         ]
  1141.         coclass CSEODictionaryItem
  1142.         {
  1143.                 [default] interface ISEODictionaryItem;
  1144.         }
  1145. //@doc SEO
  1146.         [
  1147.                 control,
  1148.                 helpstring("Class implements an ISEORouter."),
  1149.                 hidden,
  1150.                 uuid(83d63730-94fd-11d0-a9e8-00aa00685c74),
  1151.                 version(1.0)
  1152.         ]
  1153.         coclass CSEORouter
  1154.         {
  1155.                 [default] interface ISEORouter;
  1156.         }
  1157. //@doc EVENTS INTERNAL
  1158.         //@object CEventLock | Provides an IEventLock.
  1159.         //@supint IEventLock | Contention control.
  1160.         [
  1161.                 control,
  1162.                 helpstring("Class provides IEventLock."),
  1163.                 hidden,
  1164.                 uuid(2e3abb30-af88-11d0-a9eb-00aa00685c74),
  1165.                 version(1.0)
  1166.         ]
  1167.         coclass CEventLock
  1168.         {
  1169.                 [default] interface IEventLock;
  1170.         }
  1171. //@doc SEO
  1172.         [
  1173.                 helpstring("Class which implements IStream."),
  1174.                 hidden,
  1175.                 uuid(ed1343b0-a8a6-11d0-a9ea-00aa00685c74),
  1176.                 version(1.0)
  1177.         ]
  1178.         coclass CSEOStream
  1179.         {
  1180.                 [default] interface IStream;
  1181.         }
  1182. //@doc EVENTS EXTERNAL
  1183.         //@object CEventManager | Implements the global event source manager (ProgID = "Event.Manager").
  1184.         //@supint IEventManager | Provides access to registered source types, and facilities for firing events.
  1185.         [
  1186.                 control,
  1187.                 helpstring("CEventManager"),uuid(35172920-a700-11d0-a9ea-00aa00685c74),
  1188.                 version(1.0)
  1189.         ]
  1190.         coclass CEventManager
  1191.         {
  1192.                 [default] interface IEventManager;
  1193.                 interface IEventDatabasePlugin;
  1194.         }
  1195. //@doc EVENTS INTERNAL
  1196.         [
  1197.                 control,
  1198.                 helpstring("Class which implements IEventBindingManager."),
  1199.                 hidden,
  1200.                 uuid(53d01080-af98-11d0-a9eb-00aa00685c74),
  1201.                 version(1.0)
  1202.         ]
  1203.         coclass CEventBindingManager
  1204.         {
  1205.                 [default] interface IEventBindingManager;
  1206.                 interface IEventDatabasePlugin;
  1207.                 interface ISEOInitObject;
  1208.                 interface IConnectionPointContainer;
  1209.                 [source,default] interface IEventNotifyBindingChangeDisp;
  1210.                 [source] interface IEventNotifyBindingChange;
  1211.         }
  1212. //@doc SEO
  1213.         [
  1214.                 helpstring("Generic Moniker class for objects which support ISEOInitObject."),
  1215.                 hidden,
  1216.                 uuid(7e3bf330-b28e-11d0-8bd8-00c04fd42e37),
  1217.                 version(1.0)
  1218.         ]
  1219.         coclass CSEOGenericMoniker
  1220.         {
  1221.                 [default] interface IMoniker;
  1222.                 interface IParseDisplayName;
  1223.         }
  1224. //@doc EVENTS EXTERNAL
  1225.         //@object CEventMetabaseDatabaseManager | Class which implements IEventDatabaseManager for the metabase (ProgID = "Event.MetabaseDatabaseManager").
  1226.         //@supint IEventDatabaseManager | Provides facilities for managing a binding database.
  1227.         [
  1228.                 control,
  1229.                 helpstring("Class which implements IEventDatabaseManager for the metabase."),
  1230.                 uuid(8a58cdc0-cbdc-11d0-a9f8-00aa00685c74),
  1231.                 version(1.0)
  1232.         ]
  1233.         coclass CEventMetabaseDatabaseManager
  1234.         {
  1235.                 [default] interface IEventDatabaseManager;
  1236.         }
  1237. //@doc EVENTS EXTERNAL
  1238.         //@object CEventUtil | Class which implements IEventUtil (ProgID = "Event.Util").
  1239.         //@supint IEventUtil | Provides utility functions.
  1240.         [
  1241.                 control,
  1242.                 helpstring("Class which implement IEventUtil."),
  1243.                 uuid(a1e041d0-cd73-11d0-a9f8-00aa00685c74),
  1244.                 version(1.0)
  1245.         ]
  1246.         coclass CEventUtil
  1247.         {
  1248.                 [default] interface IEventUtil;
  1249.         }
  1250. //@doc EVENTS EXTERNAL
  1251.         //@object CEventComCat | Class which implements IEventComCat (ProgID = "Event.ComCat").
  1252.         //@supint IEventComCat | Provides access to component categories.
  1253.         [
  1254.                 control,
  1255.                 helpstring("Class which implements IEventComCat."),
  1256.                 uuid(ae1ef300-cd8f-11d0-a9f8-00aa00685c74),
  1257.                 version(1.0)
  1258.         ]
  1259.         coclass CEventComCat
  1260.         {
  1261.                 [default] interface IEventComCat;
  1262.         }
  1263. //@doc EVENTS INTERNAL
  1264.         //@object CEventRouter | Class which implements IEventRouter (ProgID = "Event.Router").
  1265.         //@supint IEventRouter | Event router.
  1266.         [
  1267.                 control,
  1268.                 helpstring("Class which implements IEventRouter."),
  1269.                 hidden,
  1270.                 uuid(9f82f020-f6fd-11d0-aa14-00aa006bc80b),
  1271.                 version(1.0)
  1272.         ]
  1273.         coclass CEventRouter
  1274.         {
  1275.                 [default] interface IEventRouter;
  1276.         }
  1277. };
  1278. //@doc SEO
  1279. /*
  1280.         @func HRESULT | MCISInitSEOA | Initialize SEO.  Creates an ISEORouter object which routes events
  1281.         within the specified service and virtual server.
  1282.         @parm LPCSTR | pszService | [in] Specifies the name of the service.
  1283.         @parm DWORD | dwVirtualServer | [in] Specifies the virtual server instance.
  1284.         @parm ISEORouter ** | pprouterResult | [out,retval] Receives the result.
  1285.         @rvalue S_OK | Success.
  1286.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1287.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1288.         @xref <i ISEORouter> <f MCISInitSEOW>
  1289. */
  1290. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE MCISInitSEOA(       LPCSTR pszService,")
  1291. cpp_quote("                                                                     DWORD dwVirtualServer,")
  1292. cpp_quote("                                                                     ISEORouter **pprouterResult);")
  1293. //@doc SEO
  1294. /*
  1295.         @func HRESULT | MCISInitSEOW | Initialize SEO.  Creates an ISEORouter object which routes events
  1296.         within the specified service and virtual server.
  1297.         @parm LPCWSTR | pszService | [in] Specifies the name of the service.
  1298.         @parm DWORD | dwVirtualServer | [in] Specifies the virtual server instance.
  1299.         @parm ISEORouter ** | pprouterResult | [out,retval] Receives the result.
  1300.         @rvalue S_OK | Success.
  1301.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1302.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1303.         @xref <i ISEORouter> <f MCISInitSEOA>
  1304. */
  1305. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE MCISInitSEOW(       LPCWSTR pszService,")
  1306. cpp_quote("                                                                     DWORD dwVirtualServer,")
  1307. cpp_quote("                                                                     ISEORouter **pprouterResult);")
  1308. //@doc SEO
  1309. /*
  1310.         @func HRESULT | SEOCreateDictionaryFromMultiSzA | Creates an ISEODictionary object from an array of
  1311.         property names and an array of property values.
  1312.         @parm DWORD | dwCount | [in] The count of the elements in the ppszNames and ppszValues arrays.
  1313.         @parm LPCSTR * | ppszNames | [in] An array of pointers to strings which are the names of the properties
  1314.         in the dictionary.
  1315.         @parm LPCSTR * | ppszValues | [in] An array of pointers to MULTI_SZ strings which are the values of the
  1316.         properties in the dictionary.  Any value which contains only a single string will be placed in the
  1317.         dictionary as a string.  Any value which contains multiple strings will be placed in the dictionary as
  1318.         an ISEODictionaryItem object.
  1319.         @parm BOOL | bCopy | [in] Whether or not to make a copy of the data in ppszNames and ppszValues.  This
  1320.         parameter is ignored if the value of bReadOnly is TRUE, and a copy will always be made (i.e. if the
  1321.         resulting dictionary is to allow writes, then a copy must be made of the input data).
  1322.         @parm BOOL | bReadOnly | [in] Whether or not the resulting dictionary should be read-only.  If this
  1323.         parameter is FALSE, then the bCopy parameter will be ignored and a copy will always be made (i.e. if the
  1324.         resulting dictionary is to allow writes, then a copy must be    made of the input data).
  1325.         @parm ISEODictionary ** | ppdictResult | [out,retval] The resulting dictionary.
  1326.         @rvalue S_OK | Success.
  1327.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1328.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1329.         @xref <i ISEODictionary> <i ISEODictionaryItem> <f SEOCreateDictionaryFromMultiSzW>
  1330.         <f SEOCreateMultiSzFromDictionaryA> <f SEOCreateMultiSzFromDictionaryW>
  1331. */
  1332. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOCreateDictionaryFromMultiSzA(    DWORD dwCount,")
  1333. cpp_quote("                                                                                                             LPCSTR *ppszNames,")
  1334. cpp_quote("                                                                                                             LPCSTR *ppszValues,")
  1335. cpp_quote("                                                                                                             BOOL bCopy,")
  1336. cpp_quote("                                                                                                             BOOL bReadOnly,")
  1337. cpp_quote("                                                                                                             ISEODictionary **ppdictResult);")
  1338. //@doc SEO
  1339. /*
  1340.         @func HRESULT | SEOCreateDictionaryFromMultiSzW | Creates an ISEODictionary object from an array of
  1341.         property names and an array of property values.
  1342.         @parm DWORD | dwCount | [in] The count of the elements in the ppszNames and ppszValues arrays.
  1343.         @parm LPCWSTR * | ppszNames | [in] An array of pointers to strings which are the names of the properties
  1344.         in the dictionary.
  1345.         @parm LPCWSTR * | ppszValues | [in] An array of pointers to MULTI_SZ strings which are the values of the
  1346.         properties in the dictionary.  Any value which contains only a single string will be placed in the
  1347.         dictionary as a string.  Any value which contains multiple strings will be placed in the dictionary as
  1348.         an ISEODictionaryItem object.
  1349.         @parm BOOL | bCopy | [in] Whether or not to make a copy of the data in ppszNames and ppszValues.  This
  1350.         parameter is ignored if the value of bReadOnly is TRUE, and a copy will always be made (i.e. if the
  1351.         resulting dictionary is to allow writes, then a copy must be made of the input data).
  1352.         @parm BOOL | bReadOnly | [in] Whether or not the resulting dictionary should be read-only.  If this
  1353.         parameter is FALSE, then the bCopy parameter will be ignored and a copy will always be made (i.e. if the
  1354.         resulting dictionary is to allow writes, then a copy must be    made of the input data).
  1355.         @parm ISEODictionary ** | ppdictResult | [out,retval] The resulting dictionary.
  1356.         @rvalue S_OK | Success.
  1357.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1358.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1359.         @xref <i ISEODictionary> <i ISEODictionaryItem> <f SEOCreateDictionaryFromMultiSzA>
  1360.         <f SEOCreateMultiSzFromDictionaryA> <f SEOCreateMultiSzFromDictionaryW>
  1361. */
  1362. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOCreateDictionaryFromMultiSzW(    DWORD dwCount,")
  1363. cpp_quote("                                                                                                             LPCWSTR *ppszNames,")
  1364. cpp_quote("                                                                                                             LPCWSTR *ppszValues,")
  1365. cpp_quote("                                                                                                             BOOL bCopy,")
  1366. cpp_quote("                                                                                                             BOOL bReadOnly,")
  1367. cpp_quote("                                                                                                             ISEODictionary **ppdictResult);")
  1368. //@doc SEO
  1369. /*
  1370.         @func HRESULT | SEOCreateMultiSzFromDictionaryA | Creates two arrays of strings from an ISEODictionary object.
  1371.         @parm ISEODictionary * | pdictDictionary | [in,unique] Specifies the dictionary to get the values from.
  1372.         @parm DWORD * | pdwCount | [out] Receives the count of the elements in the pppszNames and pppszValues arrays.
  1373.         @parm LPSTR ** | pppszNames | [out] Receives a pointer to the array of strings which are the names of the
  1374.         properties.  This array is allocated by SEOCreateMultiSzFromDictionary() using the CoTaskMemAlloc()
  1375.         function, and the caller must use CoTaskMemFree(*pppszNames) to free it.
  1376.         @parm LPSTR ** | ppszValues | [out] Recieves a pointer to the array of MULTI_SZ strings which are the
  1377.         values of the properties.  This array is allocated by SEOCreateMultiSzFromDictionary() using the
  1378.         CoTaskMemAlloc() function, and the caller must use CoTaskMemFree(*pppszValues) to free it.
  1379.         @rvalue S_OK | Success.
  1380.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1381.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1382.         @xref <i ISEODictionary> <i ISEODictionaryItem> <f SEOCreateMultiSzFromDictionaryW>
  1383.         <f SEOCreateDictionaryFromMultiSzA> <f SEOCreateDictionaryFromMultiSzW>
  1384. */
  1385. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOCreateMultiSzFromDictionaryA(    ISEODictionary *pdictDictionary,")
  1386. cpp_quote("                                                                                                             DWORD *pdwCount,")
  1387. cpp_quote("                                                                                                             LPSTR **pppszNames,")
  1388. cpp_quote("                                                                                                             LPSTR **pppszValues);")
  1389. //@doc SEO
  1390. /*
  1391.         @func HRESULT | SEOCreateMultiSzFromDictionaryW | Creates two arrays of strings from an ISEODictionary object.
  1392.         @parm ISEODictionary * | pdictDictionary | [in,unique] Specifies the dictionary to get the values from.
  1393.         @parm DWORD * | pdwCount | [out] Receives the count of the elements in the pppszNames and pppszValues arrays.
  1394.         @parm LPWSTR ** | pppszNames | [out] Receives a pointer to the array of strings which are the names of the
  1395.         properties.  This array is allocated by SEOCreateMultiSzFromDictionary() using the CoTaskMemAlloc()
  1396.         function, and the caller must use CoTaskMemFree(*pppszNames) to free it.
  1397.         @parm LPWSTR ** | ppszValues | [out] Recieves a pointer to the array of MULTI_SZ strings which are the
  1398.         values of the properties.  This array is allocated by SEOCreateMultiSzFromDictionary() using the
  1399.         CoTaskMemAlloc() function, and the caller must use CoTaskMemFree(*pppszValues) to free it.
  1400.         @rvalue S_OK | Success.
  1401.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1402.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1403.         @xref <i ISEODictionary> <i ISEODictionaryItem> <f SEOCreateMultiSzFromDictionaryA>
  1404.         <f SEOCreateDictionaryFromMultiSzA> <f SEOCreateDictionaryFromMultiSzW>
  1405. */
  1406. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOCreateMultiSzFromDictionaryW(    ISEODictionary *pdictDictionary,")
  1407. cpp_quote("                                                                                                             DWORD *pdwCount,")
  1408. cpp_quote("                                                                                                             LPWSTR **pppszNames,")
  1409. cpp_quote("                                                                                                             LPWSTR **pppszValues);")
  1410. //@doc SEO
  1411. /*
  1412.         @func HRESULT | MCISGetBindingInMetabaseA | Creates an ISEODictionary for a binding in the metabase.
  1413.         @parm LPCSTR | pszService | [in] Specifies the name of the service.
  1414.         @parm DWORD | dwVirtualServer | [in] Specifies the virtual server instance.
  1415.         @parm REFGUID | guidEventSource | [in] Specifies the event source.  May be GUID_NULL, in which case
  1416.         the pszBinding parameter is ignored and the returned dictionary is for the root of the binding tree.
  1417.         @parm LPCSTR | pszBinding | [in] Specifies the name of the binding.  If this value is NULL, and bCreate
  1418.         is TRUE, then the function creates a new binding.
  1419.         @parm BOOL | bCreate | [in] Specifies whether or not to create the binding.  If this value is TRUE, then
  1420.         if the binding is not already present, it will be created.  If this value is FALSE, and the binding is not
  1421.         already present, then the function returns SEO_E_NOTPRESENT.
  1422.         @parm BOOL | bLock | [in] Specifies whether the ISEODictionary should hold a lock on the Metabase.  If
  1423.         this value is TRUE, then the lock lasts for the lifetime of the ISEODictionary object.  If this value is
  1424.         FALSE, then the caller is responsible for managing locking - the caller should query the returned object
  1425.         for an IEventLock interface.
  1426.         @parm ISEODictionary ** | ppdictResult | [out,retval] Receives the result.
  1427.         @rvalue S_OK | Success.
  1428.         @rvalue SEO_E_NOTPRESENT | Failure, the binding is not present and bCreate was FALSE.
  1429.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1430.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1431.         @xref <i ISEODictionary> <i IEventLock> <f MCISGetBindingInMetabaseW>
  1432. */
  1433. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE MCISGetBindingInMetabaseA(  LPCSTR pszService,")
  1434. cpp_quote("                                                                                             DWORD dwVirtualServer,")
  1435. cpp_quote("                                                                                             REFGUID guidEventSource,")
  1436. cpp_quote("                                                                                             LPCSTR pszBinding,")
  1437. cpp_quote("                                                                                             BOOL bCreate,")
  1438. cpp_quote("                                                                                             BOOL fLock,")
  1439. cpp_quote("                                                                                             ISEODictionary **ppdictResult);")
  1440. //@doc SEO
  1441. /*
  1442.         @func HRESULT | MCISGetBindingInMetabaseW | Creates an ISEODictionary for a binding in the metabase.
  1443.         @parm LPCWSTR | pszService | [in] Specifies the name of the service.
  1444.         @parm DWORD | dwVirtualServer | [in] Specifies the virtual server instance.
  1445.         @parm REFGUID | guidEventSource | [in] Specifies the event source.  May be GUID_NULL, in which case
  1446.         the pszBinding parameter is ignore and the returned dictionary is for the root of the binding tree.
  1447.         @parm LPCWSTR | pszBinding | [in] Specifies the name of the binding.  If this value is NULL, and bCreate
  1448.         is TRUE, then the function creates a new binding.
  1449.         @parm BOOL | bCreate | [in] Specifies whether or not to create the binding.  If this value is TRUE, then
  1450.         if the binding is not already present, it will be created.  If this value is FALSE, and the binding is not
  1451.         already present, then the function returns SEO_E_NOTPRESENT.
  1452.         @parm BOOL | bLock | [in] Specifies whether the ISEODictionary should hold a lock on the Metabase.  If
  1453.         this value is TRUE, then the lock lasts for the lifetime of the ISEODictionary object.  If this value is
  1454.         FALSE, then the caller is responsible for managing locking - the caller should query the returned object
  1455.         for an IEventLock interface.
  1456.         @parm ISEODictionary ** | ppdictResult | [out,retval] Receives the result.
  1457.         @rvalue S_OK | Success.
  1458.         @rvalue SEO_E_NOTPRESENT | Failure, the binding is not present and bCreate was FALSE.
  1459.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1460.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1461.         @xref <i ISEODictionary> <i IEventLock> <f MCISGetBindingInMetabaseA>
  1462. */
  1463. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE MCISGetBindingInMetabaseW(  LPCWSTR pszService,")
  1464. cpp_quote("                                                                                             DWORD dwVirtualServer,")
  1465. cpp_quote("                                                                                             REFGUID guidEventSource,")
  1466. cpp_quote("                                                                                             LPCWSTR pszBinding,")
  1467. cpp_quote("                                                                                             BOOL bCreate,")
  1468. cpp_quote("                                                                                             BOOL fLock,")
  1469. cpp_quote("                                                                                             ISEODictionary **ppdictResult);")
  1470. //@doc SEO
  1471. /*
  1472.         @func HRESULT | SEOListenForEvent | Registers a callback object which gets called when a handle is
  1473.         signaled.  This function gives the hEvent handle to a background thread - that single thread watches
  1474.         all of the handles given to it (using the WaitForMultipleObjectsEx() function), and when any one of
  1475.         them is signaled, calls the corresponding event sink.
  1476.         @parm ISEORouter * | piRouter | [in,unique] Specifies the router in whose context the listening happens.
  1477.         @parm HANDLE | hEvent | [in] Specifies the handle of the event.
  1478.         @parm ISEOEventSink * | psinkEventSink | [in,unique] Specifies the event sink object to call when the handle
  1479.         is signaled.
  1480.         @parm BOOL | bOnce | [in] If TRUE, then the event is only fired once, and then is removed from the
  1481.         list of watched events.
  1482.         @parm DWORD * | pdwListenHandle | [out] Receives a value which is passed to SEOCancelListenForEvent()
  1483.         when the client no longer wants the event to be watched.
  1484.         @rvalue S_OK | Success.
  1485.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1486.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1487.         @xref <i ISEOEventSink> <f SEOCancelListenForEvent>
  1488. */
  1489. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOListenForEvent(  ISEORouter *piRouter,")
  1490. cpp_quote("                                                                             HANDLE hEvent,")
  1491. cpp_quote("                                                                             ISEOEventSink *psinkEventSink,")
  1492. cpp_quote("                                                                             BOOL bOnce,")
  1493. cpp_quote("                                                                             DWORD *pdwListenHandle);")
  1494. //@doc SEO
  1495. /*
  1496.         @func HRESULT | SEOCancelListenForEvent | Cancels the effects of the SEOListenForEvent() function.
  1497.         @parm ISEORouter * | piRouter | [in] Specifies the context in which the event handling is to take place.
  1498.         @parm DWORD | dwHandle | [in] Specifies the instance of SEOListenForEvent() which is to be canceled.
  1499.         @rvalue S_OK | Success.
  1500.         @rvalue SEO_E_NOTPRESENT | Failure, the specified instance of SEOListenForEvent was not found.
  1501.         @xref <f SEOListenForEvent> <i ISEORouter>
  1502. */
  1503. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOCancelListenForEvent(    DWORD dwHandle);")
  1504. //@doc SEO
  1505. /*
  1506.         @func HRESULT | SEOCreateIStreamFromFileA | Creates an IStream object for a file.
  1507.         @parm HANDLE | hFile | [in] Species the handle of an open file to create the IStream from.  If this
  1508.         value is NULL, then the pszFile parameter is used.  If this value is non-NULL, then the handle is
  1509.         duplicated and that duplicate is used by the IStream.
  1510.         @parm LPCSTR | pszFile | [in] Specifies the name of the file.  If hFile is non-NULL, then this name
  1511.         will be saved - the file will only be opened if one of the IStream's methods actually needs to access
  1512.         the file.  (Note that if this is a relative pathname, and if the current directory changes between
  1513.         when the IStream is created and when the IStream attempts to open the file, then unexpected results
  1514.         may occur.)
  1515.         @parm IStream ** | ppstreamResult | [out,retval] Receives the result.
  1516.         @rvalue S_OK | Success.
  1517.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1518.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1519.         @xref <f SEOCreateIStreamFromFileW>
  1520. */
  1521. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOCreateIStreamFromFileA(  HANDLE hFile,")
  1522. cpp_quote("                                                                                             LPCSTR pszFile,")
  1523. cpp_quote("                                                                                             IStream **ppstreamResult);")
  1524. //@doc SEO
  1525. /*
  1526.         @func HRESULT | SEOCreateIStreamFromFileW | Creates an IStream object for a file.
  1527.         @parm HANDLE | hFile | [in] Species the handle of an open file to create the IStream from.  If this
  1528.         value is NULL, then the pszFile parameter is used.  If this value is non-NULL, then the handle is
  1529.         duplicated and that duplicate is used by the IStream.
  1530.         @parm LPCWSTR | pszFile | [in] Specifies the name of the file.  If hFile is non-NULL, then this name
  1531.         will be saved - the file will only be opened if one of the IStream's methods actually needs to access
  1532.         the file.  (Note that if this is a relative pathname, and if the current directory changes between
  1533.         when the IStream is created and when the IStream attempts to open the file, then unexpected results
  1534.         may occur.)
  1535.         @parm IStream ** | ppstreamResult | [out,retval] Receives the result.
  1536.         @rvalue S_OK | Success.
  1537.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1538.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1539.         @xref <f SEOCreateIStreamFromFileA>
  1540. */
  1541. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOCreateIStreamFromFileW(  HANDLE hFile,")
  1542. cpp_quote("                                                                                             LPCWSTR pszFile,")
  1543. cpp_quote("                                                                                             IStream **ppstreamResult);")
  1544. //@doc SEO
  1545. /*
  1546.         @func HRESULT | SEOCopyDictionary | Copies a dictionary in-depth - the resulting object is a
  1547.         CSEOMemDictionary.
  1548.         @parm ISEODictionary * | pdictIn | [in,unique] Specifies the input dictionary.
  1549.         @parm ISEODictionary ** |ppdictResult | [out,retval] Receives the result.
  1550.         @rvalue S_OK | Success.
  1551.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1552.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1553.         @xref <i ISEODictionary>
  1554. */
  1555. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOCopyDictionary(  ISEODictionary *pdictIn, ISEODictionary **ppdictResult);")
  1556. //@doc SEO
  1557. /*
  1558.         @func HRESULT | SEOCreateDictionaryFromIStream | Creates a dictionary from a stream.
  1559.         @parm IStream * | pstreamIn | [in] The source stream.
  1560.         @parm ISEODictionary ** | ppdictResult | [out,retval] Receives the result.
  1561.         @rvalue S_OK | Success.
  1562.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1563.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1564.         @xref <i ISEODictionary> <f SEOWriteDictionaryToIStream>
  1565. */
  1566. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOCreateDictionaryFromIStream(     IStream *pstreamIn, ISEODictionary **ppdictResult);")
  1567. //@doc SEO
  1568. /*
  1569.         @func HRESULT | SEOWriteDictionaryToIStream | Writes a dictionary to a stream.
  1570.         @parm ISEODictionary * | pdictIn | [in] Specifies the dictionary.
  1571.         @parm IStream * | pstreamOut | [in] The stream to write the dictionary to.
  1572.         @rvalue S_OK | Success.
  1573.         @rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1574.         @rvalue E_OUTOFMEMORY | Failure, out of memory.
  1575.         @xref <i ISEODictionary> <f SEOCreateDictionaryFromIStream>
  1576. */
  1577. cpp_quote("SEODLLDEF HRESULT STDAPICALLTYPE SEOWriteDictionaryToIStream(        ISEODictionary *pdictIn, IStream *pstreamOut);")