hxplugn.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:41k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _HXPLUGN_H_
  36. #define _HXPLUGN_H_
  37. #include "hxcom.h"
  38. #include "hxplugncompat.h"
  39. /*
  40.  * Forward declarations of some interfaces defined or used here-in.
  41.  */
  42. typedef _INTERFACE  IUnknown     IUnknown;
  43. typedef _INTERFACE  IHXPlugin     IHXPlugin;
  44. typedef _INTERFACE  IHXPluginEnumerator     IHXPluginEnumerator;
  45. // $Private:
  46. typedef _INTERFACE  IHXPluginSearchEnumerator     IHXPluginSearchEnumerator;
  47. typedef _INTERFACE  IHXPluginChallenger     IHXPluginChallenger;
  48. // $EndPrivate.
  49. typedef _INTERFACE  IHXBuffer     IHXBuffer;
  50. typedef _INTERFACE  IHXValues     IHXValues;
  51. typedef _INTERFACE  IHXPreferences     IHXPreferences;
  52. // Plugin Types.
  53. #define PLUGIN_FILESYSTEM_TYPE     "PLUGIN_FILE_SYSTEM"
  54. #define PLUGIN_FILEFORMAT_TYPE     "PLUGIN_FILE_FORMAT"
  55. #define PLUGIN_FILEWRITER_TYPE     "PLUGIN_FILE_WRITER"
  56. #define PLUGIN_METAFILEFORMAT_TYPE  "PLUGIN_METAFILE_FORMAT"
  57. #define PLUGIN_RENDERER_TYPE     "PLUGIN_RENDERER"
  58. #define PLUGIN_REVERTER_TYPE     "PLUGIN_REVERTER"
  59. #define PLUGIN_BROADCAST_TYPE     "PLUGIN_BROADCAST"
  60. #define PLUGIN_STREAM_DESC_TYPE     "PLUGIN_STREAM_DESC"
  61. #define PLUGIN_ALLOWANCE_TYPE     "PLUGIN_ALLOWANCE"
  62. #define PLUGIN_PAC_TYPE     "PLUGIN_PAC"
  63. #define PLUGIN_CLASS_FACTORY_TYPE   "PLUGIN_CLASS_FACT"
  64. #define PLUGIN_CLASS     "PluginType"
  65. #define PLUGIN_FILENAME     "PluginFilename"
  66. #define PLUGIN_REGKEY_ROOT     "PluginHandlerData"
  67. #define PLUGIN_PLUGININFO     "PluginInfo"
  68. #define PLUGIN_GUIDINFO     "GUIDInfo"
  69. #define PLUGIN_NONHXINFO     "NonHXDLLs"
  70. #define PLUGIN_IDENTIFIER     "Plugin#"
  71. // This may no longer be needed...
  72. #define PLUGINDIRECTORYHASH     "DirHash"     
  73. // XXXAH WHO is defining this ... I think I know..
  74. #define PLUGIN_DESCRIPTION2     "Description"
  75. // XXXAH WHO is defining this ... I think I know..
  76. #define PLUGIN_FILE_HASH     "FileHash"
  77. #define PLUGIN_INDEX     "IndexNumber"
  78. #define PLUGIN_FILENAMES     "FileInfo"
  79. #define PLUGIN_COPYRIGHT2     "Copyright"
  80. #define PLUGIN_LOADMULTIPLE     "LoadMultiple"
  81. #define PLUGIN_VERSION     "Version"
  82. #define PLUGIN_FILESYSTEMSHORT     "FileShort"
  83. #define PLUGIN_FILESYSTEMPROTOCOL   "FileProtocol"
  84. #define PLUGIN_FILEMIMETYPES     "FileMime"
  85. #define PLUGIN_FILEEXTENSIONS     "FileExtensions"
  86. #define PLUGIN_FILEOPENNAMES     "FileOpenNames"
  87. #define PLUGIN_RENDERER_MIME     "RendererMime"
  88. #define PLUGIN_RENDERER_GRANULARITY "Renderer_Granularity"
  89. #define PLUGIN_REVERTER_MIME     "ReverterMime"
  90. #define PLUGIN_BROADCASTTYPE     "BroadcastType"
  91. #define PLUGIN_STREAMDESCRIPTION    "StreamDescription"
  92. // 
  93. #define PLUGIN_GUID_RESPONSE     "MainGuid"
  94. #define PLUGIN_FACTORY_GUIDS     "" // These are comma delimited.
  95. //
  96. #define PLUGIN_NUM_PLUGINS     "NumPlugins"
  97. #define PLUGIN_FILE_CHECKSUM     "DLLCheckSum"
  98. #define PLUGIN_DLL_SIZE     "DLLSize"
  99. #define PLUGIN_HAS_FACTORY     "DLLHasFactory"
  100. /****************************************************************************
  101.  * 
  102.  *  Function:
  103.  * 
  104.  * HXCreateInstance()
  105.  * 
  106.  *  Purpose:
  107.  * 
  108.  * Function implemented by all plugin DLL's to create an instance of 
  109.  * any of the objects supported by the DLL. This method is similar to 
  110.  * Window's CoCreateInstance() in its purpose, except that it only 
  111.  * creates objects from this plugin DLL.
  112.  *
  113.  * NOTE: Aggregation is never used. Therefore an outer unknown is
  114.  * not passed to this function, and you do not need to code for this
  115.  * situation.
  116.  * 
  117.  */
  118. #ifdef _MAC_CFM
  119. #pragma export on
  120. #endif
  121. STDAPI HXCreateInstance
  122. (
  123.     IUnknown**  /*OUT*/ ppIUnknown
  124. );
  125. #ifdef _MAC_CFM
  126. #pragma export off
  127. #endif
  128. /****************************************************************************
  129.  * 
  130.  *  Function:
  131.  * 
  132.  * HXShutdown()
  133.  * 
  134.  *  Purpose:
  135.  * 
  136.  * Function implemented by all plugin DLL's to free any *global* 
  137.  * resources. This method is called just before the DLL is unloaded.
  138.  *
  139.  */
  140. #ifdef _MAC_CFM
  141. #pragma export on
  142. #endif
  143. STDAPI HXShutdown(void);
  144. #ifdef _MAC_CFM
  145. #pragma export off
  146. #endif
  147. /****************************************************************************
  148.  * 
  149.  *  Interface:
  150.  * 
  151.  * IHXPlugin
  152.  * 
  153.  *  Purpose:
  154.  * 
  155.  * Interface exposed by a plugin DLL to allow inspection of objects
  156.  * supported by the plugin DLL.
  157.  * 
  158.  *  IID_IHXPlugin:
  159.  * 
  160.  * {00000C00-0901-11d1-8B06-00A024406D59}
  161.  * 
  162.  */
  163. DEFINE_GUID(IID_IHXPlugin, 0x00000C00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  164. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  165. #undef  INTERFACE
  166. #define INTERFACE   IHXPlugin
  167. DECLARE_INTERFACE_(IHXPlugin, IUnknown)
  168. {
  169.     /*
  170.      * IUnknown methods
  171.      */
  172.     STDMETHOD(QueryInterface) (THIS_
  173. REFIID riid,
  174. void** ppvObj) PURE;
  175.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  176.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  177.     /*
  178.      * IHXPlugin methods
  179.      */
  180.     /************************************************************************
  181.      * Method:
  182.      *     IHXPlugin::GetPluginInfo
  183.      * Purpose:
  184.      *     Returns the basic information about this plugin. Including:
  185.      *
  186.      *     bMultipleLoad Whether or not this plugin can be instantiated
  187.      * multiple times. All File Formats must set
  188.      * this value to TRUE.  The only other type of
  189.      * plugin that can specify bMultipleLoad=TRUE is
  190.      * a filesystem plugin.  Any plugin that sets
  191.      * this flag to TRUE must not use global variables
  192.      * of any type.
  193.      *
  194.      * Setting this flag to TRUE implies that you
  195.      * accept that your plugin may be instantiated
  196.      * multiple times (possibly in different
  197.      * address spaces).  Plugins are instantiated
  198.      * multiple times only in the server (for
  199.      * performance reasons).
  200.      *
  201.      * An example of a plugin, that must set this
  202.      * flag to FALSE is a filesystem plugin that 
  203.      * uses a single TCP connection to communicate
  204.      * with a database.
  205.      *
  206.      *     pDescription which is used in about UIs (can be NULL)
  207.      *     pCopyright which is used in about UIs (can be NULL)
  208.      *     pMoreInfoURL which is used in about UIs (can be NULL)
  209.      *     ulVersionNumber The version of this plugin.
  210.      */
  211.     STDMETHOD(GetPluginInfo) (THIS_
  212. REF(BOOL)  /*OUT*/ bMultipleLoad,
  213. REF(const char*) /*OUT*/ pDescription,
  214. REF(const char*) /*OUT*/ pCopyright,
  215. REF(const char*) /*OUT*/ pMoreInfoURL,
  216. REF(ULONG32)  /*OUT*/ ulVersionNumber) PURE;
  217.     /************************************************************************
  218.      * Method:
  219.      *     IHXPlugin::InitPlugin
  220.      * Purpose:
  221.      *     Initializes the plugin for use. This interface must always be
  222.      *     called before any other method is called. This is primarily needed 
  223.      *     so that the plugin can have access to the context for creation of
  224.      *     IHXBuffers and IMalloc.
  225.      */
  226.     STDMETHOD(InitPlugin)   (THIS_
  227.     IUnknown*   /*IN*/  pContext) PURE;
  228. };
  229. /****************************************************************************
  230.  * 
  231.  *  Interface:
  232.  * 
  233.  * IHXPluginEnumerator
  234.  * 
  235.  *  Purpose:
  236.  * 
  237.  * provide methods to enumerate through all the plugins installed
  238.  * 
  239.  *  IID_IHXPluginEnumerator:
  240.  * 
  241.  * {00000C01-0901-11d1-8B06-00A024406D59}
  242.  * 
  243.  */
  244. DEFINE_GUID(IID_IHXPluginEnumerator, 0x00000C01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  245. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  246. #undef  INTERFACE
  247. #define INTERFACE   IHXPluginEnumerator
  248. DECLARE_INTERFACE_(IHXPluginEnumerator, IUnknown)
  249. {
  250.     /*
  251.      * IUnknown methods
  252.      */
  253.     STDMETHOD(QueryInterface) (THIS_
  254. REFIID riid,
  255. void** ppvObj) PURE;
  256.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  257.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  258.     /*
  259.      * IHXPluginEnumerator methods
  260.      */
  261.     /************************************************************************
  262.      * Method:
  263.      *     IHXPluginEnumerator::GetNumOfPlugins
  264.      *
  265.      * Purpose:    
  266.      *     return the number of plugins available
  267.      *
  268.      */
  269.     STDMETHOD_(ULONG32,GetNumOfPlugins) (THIS) PURE;
  270.     /************************************************************************
  271.      * Method:
  272.      *     IHXPluginEnumerator::GetPlugin
  273.      * Purpose:
  274.      *     Return an instance (IUnknown) of the plugin
  275.      *
  276.      */
  277.     STDMETHOD(GetPlugin)   (THIS_
  278.    ULONG32    /*IN*/  ulIndex,
  279.    REF(IUnknown*)  /*OUT*/ pPlugin) PURE;
  280. };
  281. /****************************************************************************
  282.  * 
  283.  *  Interface:
  284.  * 
  285.  * IHXPluginGroupEnumerator
  286.  * 
  287.  *  Purpose:
  288.  * 
  289.  * Provide a way to enumerate through all of the plugins which
  290.  * implement a specific interface.
  291.  * 
  292.  *  IID_IHXPluginGroupEnumerator:
  293.  * 
  294.  * {00000C02-0901-11d1-8B06-00A024406D59}
  295.  * 
  296.  */
  297. DEFINE_GUID(IID_IHXPluginGroupEnumerator, 0x00000C02, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  298. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  299. #undef  INTERFACE
  300. #define INTERFACE   IHXPluginGroupEnumerator
  301. #define CLSID_IHXPluginGroupEnumerator IID_IHXPluginGroupEnumerator
  302. DECLARE_INTERFACE_(IHXPluginGroupEnumerator, IUnknown)
  303. {
  304.     /*
  305.      * IUnknown methods
  306.      */
  307.     /*
  308.      * IHXPluginGroupEnumerator methods
  309.      */
  310.     STDMETHOD(QueryInterface) (THIS_
  311. REFIID riid,
  312. void** ppvObj) PURE;
  313.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  314.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  315.     /******************************************************************
  316.      * Method:
  317.      *     IHXPluginGroupEnumerator::Init
  318.      *
  319.      * Purpose:
  320.      *     tell the group enumerator which interface to group the plugins
  321.      *     into, this method must be called before the other methods can
  322.      *     be called.
  323.      *
  324.      */
  325.     STDMETHOD(Init)         (THIS_
  326.                             REFIID    iid) PURE;
  327.     /******************************************************************
  328.      * Method:
  329.      *     IHXPluginGroupEnumerator::GetNumOfPlugins
  330.      *
  331.      * Purpose:
  332.      *     return the number of plugins available that support a
  333.      *    particular interface.
  334.      *
  335.      */
  336.     STDMETHOD_(ULONG32,GetNumOfPlugins) (THIS) PURE;
  337.     /******************************************************************
  338.      * Method:
  339.      *     IHXPluginGroupEnumerator::GetPlugin
  340.      * Purpose:
  341.      *     Return an instance (IUnknown) of the plugin
  342.      *
  343.      */
  344.     STDMETHOD(GetPlugin)   (THIS_
  345.       UINT32    /*IN*/  ulIndex,
  346.       REF(IUnknown*)  /*OUT*/ pPlugin) PURE;
  347. };
  348. // $Private:
  349. /****************************************************************************
  350.  * 
  351.  *  Interface:
  352.  * 
  353.  * IHXPluginSearchEnumerator
  354.  * 
  355.  *  Purpose:
  356.  * Walk through the result set of a plugin search 
  357.  *
  358.  * {3244B391-42D4-11d4-9503-00902790299C}
  359.  * 
  360.  */
  361. DEFINE_GUID( IID_IHXPluginSearchEnumerator, 
  362.     0x3244b391, 0x42d4, 0x11d4, 0x95, 0x3, 0x0, 0x90, 0x27, 0x90, 0x29, 0x9c);
  363. #undef  INTERFACE
  364. #define INTERFACE   IHXPluginSearchEnumerator
  365. DECLARE_INTERFACE_( IHXPluginSearchEnumerator, IUnknown )
  366. {
  367.     /*
  368.      * IUnknown methods
  369.      */
  370.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;
  371.     STDMETHOD_(ULONG32,AddRef)(THIS) PURE;
  372.     STDMETHOD_(ULONG32,Release)(THIS) PURE;
  373.     /*
  374.      * IHXPluginSearchEnumerator methods
  375.      */
  376.     /************************************************************************
  377.      * Method:
  378.      *     IHXPluginSearchEnumerator::GetNumPlugins
  379.      *
  380.      * Purpose:    
  381.      *     Returns numbers of plugins found during search
  382.      *
  383.      */
  384.     STDMETHOD_( UINT32, GetNumPlugins)(THIS) PURE;
  385.     /************************************************************************
  386.      * Method:
  387.      *     IHXPluginSearchEnumerator::GoHead
  388.      *
  389.      * Purpose:    
  390.      *     Moves the iterator to the beginning of the collection
  391.      *
  392.      */
  393.     STDMETHOD_(void, GoHead)(THIS) PURE;
  394.     
  395.     /************************************************************************
  396.      * Method:
  397.      *     IHXPluginSearchEnumerator::GetNextPlugin
  398.      *
  399.      * Purpose:    
  400.      *     Returns an instance of the next plugin in the collection
  401.      *
  402.      */
  403.     STDMETHOD(GetNextPlugin)( THIS_ REF(IUnknown*) pIUnkResult, 
  404.     IUnknown* pIUnkOuter ) PURE;
  405.     /************************************************************************
  406.      * Method:
  407.      *     IHXPluginSearchEnumerator::GetNextPluginInfo
  408.      *
  409.      * Purpose:    
  410.      *     Gets information about the next plugin in the list
  411.      *
  412.      */
  413.     STDMETHOD(GetNextPluginInfo)( THIS_ REF(IHXValues*) pRetValues ) PURE;
  414.     
  415.     /************************************************************************
  416.      * Method:
  417.      *     IHXPluginSearchEnumerator::GetPluginAt
  418.      *
  419.      * Purpose:    
  420.      *     Returns an instance of a plugin at a specific index in the list
  421.      *
  422.      */
  423.     STDMETHOD(GetPluginAt)( THIS_ UINT32 index, 
  424.     REF(IUnknown*) pIUnkResult, 
  425.     IUnknown* pIUnkOuter ) PURE;
  426.     /************************************************************************
  427.      * Method:
  428.      *     IHXPluginSearchEnumerator::
  429.      *
  430.      * Purpose:    
  431.      *     Returns information about a plugin at a specific index in the list
  432.      *
  433.      */
  434.     STDMETHOD(GetPluginInfoAt)( THIS_ UINT32 index, 
  435.     REF(IHXValues*) pRetValues ) PURE;
  436. };
  437. // $EndPrivate.
  438. /****************************************************************************
  439.  * 
  440.  *  Interface:
  441.  * 
  442.  * IHXPluginReloader
  443.  * 
  444.  *  Purpose:
  445.  * 
  446.  * Tells the client core to reload all plugins.
  447.  * 
  448.  *  IID_IHXPluginReloader:
  449.  * 
  450.  * {00000C03-0901-11d1-8B06-00A024406D59}
  451.  * 
  452.  */
  453. DEFINE_GUID(IID_IHXPluginReloader, 0x00000C03, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  454. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  455. #undef  INTERFACE
  456. #define INTERFACE   IHXPluginReloader
  457. DECLARE_INTERFACE_(IHXPluginReloader, IUnknown)
  458. {
  459.     /*
  460.      * IUnknown methods
  461.      */
  462.     STDMETHOD(QueryInterface) (THIS_
  463. REFIID riid,
  464. void** ppvObj) PURE;
  465.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  466.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  467.     /*
  468.      * IHXPluginReloader methods
  469.      */
  470.     /************************************************************************
  471.      * Method:
  472.      *     IHXPluginReloader::ReloadPlugins
  473.      * Purpose:    
  474.      *     Causes the client core to reload all plugins.
  475.      *
  476.      */
  477.     STDMETHOD(ReloadPlugins) (THIS) PURE;
  478. };
  479. /****************************************************************************
  480.  * 
  481.  *  Interface:
  482.  * 
  483.  * IHXPluginFactory
  484.  * 
  485.  *  Purpose:
  486.  * 
  487.  * This interface is implemented by a plugin in order to have more then
  488.  *     one "RMA plugin" in a single DLL.  I.e., a plugin author could
  489.  *     use this interface to have 3 different file format plugins in
  490.  *     a single DLL.
  491.  * 
  492.  *  IID_IHXPluginFactory:
  493.  * 
  494.  * {00000C04-0901-11d1-8B06-00A024406D59}
  495.  * 
  496.  */
  497. DEFINE_GUID(IID_IHXPluginFactory, 0x00000C04, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  498. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  499. #undef  INTERFACE
  500. #define INTERFACE   IHXPluginFactory
  501. DECLARE_INTERFACE_(IHXPluginFactory, IUnknown)
  502. {
  503.     /*
  504.      * IUnknown methods
  505.      */
  506.     STDMETHOD(QueryInterface) (THIS_
  507.  REFIID riid,
  508.  void** ppvObj) PURE;
  509.     
  510.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  511.     
  512.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  513.     
  514.     /*
  515.      * IHXPluginFactory methods
  516.      */
  517.     
  518.     /*****************************************************************
  519.      * Method:
  520.      *     IHXPluginFactory::GetNumPlugins
  521.      * Purpose:
  522.      *     Report the number of Plugins within the DLL.
  523.      *
  524.      * Parameters:
  525.      */
  526.     STDMETHOD_(UINT16, GetNumPlugins) (THIS)  PURE;
  527.     /*****************************************************************
  528.      * Method:
  529.      *     IHXPluginFactory::GetPlugin
  530.      * Purpose:
  531.      *     Returns an IUnknown interface to the requested plugin. 
  532.      *
  533.      * Parameters:
  534.      */
  535.     STDMETHOD(GetPlugin) (THIS_
  536.  UINT16  uIndex, 
  537.  IUnknown**   pPlugin) PURE;
  538. };
  539. // $Private:
  540. /****************************************************************************
  541.  * 
  542.  *  Interface:
  543.  * 
  544.  * IHXPluginChallenger
  545.  * 
  546.  *  Purpose:
  547.  * 
  548.  * This interface is implemented by a plugin in order to allow
  549.  * verification of a plugin's authenticity, by issuing a challenge
  550.  * and receiving a challenge response.
  551.  * 
  552.  *  IID_IHXPluginChallenger:
  553.  * 
  554.  * {00000C05-0901-11d1-8B06-00A024406D59}
  555.  * 
  556.  */
  557. DEFINE_GUID(IID_IHXPluginChallenger, 0x00000C05, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  558. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  559. #undef  INTERFACE
  560. #define INTERFACE   IHXPluginChallenger
  561. typedef struct _HXTimeval HXTimeval;
  562. DECLARE_INTERFACE_(IHXPluginChallenger, IUnknown)
  563. {
  564.     /*
  565.      * IUnknown methods
  566.      */
  567.     STDMETHOD(QueryInterface) (THIS_
  568.  REFIID riid,
  569.  void** ppvObj) PURE;
  570.     
  571.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  572.     
  573.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  574.     
  575.     /*
  576.      * IHXPluginChallenger methods
  577.      */
  578.     
  579.     /*****************************************************************
  580.      * Method:
  581.      *     IHXPluginChallenger::Challenge
  582.      * Purpose:
  583.      *     Challenge the plugin's authenticity. Returns a challenge
  584.      *     response which the caller can use to verify that the
  585.      *     plugin is authentic.
  586.      *
  587.      * Parameters:
  588.      *     tVal    A time value which may be used to create the
  589.      *     challenge response.
  590.      */
  591.     STDMETHOD(Challenge) (THIS_
  592.  HXTimeval   /*IN*/  tVal,
  593.  REF(IHXBuffer*) /*OUT*/ pResponse) PURE;
  594. };
  595. /****************************************************************************
  596.  * 
  597.  *  Interface:
  598.  * 
  599.  * IHXPluginQuery
  600.  * 
  601.  *  Purpose:
  602.  * 
  603.  * Queries the plugin handler for information on plugins.
  604.  * 
  605.  *  IID_IHXPluginQuery:
  606.  * 
  607.  * {00000C06-0901-11d1-8B06-00A024406D59}
  608.  * 
  609.  */
  610. #define PLUGIN_FILE_PATH     "PluginFilePath"
  611. #define PLUGIN_PATH "PlgPath"
  612. #define PLUGIN_DESCRIPTION "PlgDesc"
  613. #define PLUGIN_COPYRIGHT "PlgCopy"
  614. #define PLUGIN_MOREINFO "PlgMore"
  615. #define PLUGIN_MIMETYPES "PlgMime"
  616. #define PLUGIN_EXTENSIONS "PlgExt"
  617. #define PLUGIN_OPENNAME "PlgOpen"
  618. #define PLUGIN_MULTIPLE "PlgMult"
  619. DEFINE_GUID(IID_IHXPluginQuery, 0x00000C06, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  620. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  621. #undef  INTERFACE
  622. #define INTERFACE   IHXPluginQuery
  623. DECLARE_INTERFACE_(IHXPluginQuery, IUnknown)
  624. {
  625.     /*
  626.      * IUnknown methods
  627.      */
  628.     STDMETHOD(QueryInterface) (THIS_
  629. REFIID riid,
  630. void** ppvObj) PURE;
  631.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  632.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  633.     /*
  634.      * IHXPluginQuery methods
  635.      */
  636.     /************************************************************************
  637.      * Method:
  638.      *     IHXPluginQuery::GetNumPluginsGivenGroup
  639.      *
  640.      * Purpose:    
  641.      *     Gets the number of plugins associated with a particular class id.
  642.      *
  643.      */
  644.     STDMETHOD(GetNumPluginsGivenGroup) (THIS_ REFIID riid, 
  645. REF(UINT32) /*OUT*/ unNumPlugins) PURE;
  646.     /************************************************************************
  647.      * Method:
  648.      *     IHXPluginQuery::GetPluginInfo
  649.      *
  650.      * Purpose:    
  651.      *     Gets the info of a particular plugin.
  652.      *
  653.      */
  654.     STDMETHOD(GetPluginInfo) (THIS_ REFIID riid, 
  655. UINT32 unIndex, REF(IHXValues*) /*OUT*/ Values) PURE;
  656. };
  657. // $EndPrivate.
  658. /****************************************************************************
  659.  * 
  660.  *  Interface:
  661.  * 
  662.  * IHXGenericPlugin
  663.  * 
  664.  *  Purpose:
  665.  * 
  666.  * Interface exposed by a plugin DLL to inform the client / server core
  667.  * that your plugin wishes to have InitPlugin called immediately.
  668.  *
  669.  *  IID_IHXGenericPlugin:
  670.  * 
  671.  * {00000C09-0901-11d1-8B06-00A024406D59}
  672.  * 
  673.  */
  674. DEFINE_GUID(IID_IHXGenericPlugin, 0x00000C09, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  675. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  676. #undef  INTERFACE
  677. #define INTERFACE   IHXGenericPlugin
  678. DECLARE_INTERFACE_(IHXGenericPlugin, IUnknown)
  679. {
  680.     /*
  681.      * IUnknown methods
  682.      */
  683.     STDMETHOD(QueryInterface) (THIS_
  684. REFIID riid,
  685. void** ppvObj) PURE;
  686.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  687.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  688.     /*
  689.      * IHXGenericPlugin methods
  690.      */
  691.     STDMETHOD(IsGeneric) (THIS_
  692. REF(BOOL)  /*OUT*/ bIsGeneric) PURE;
  693. };
  694. DEFINE_GUID(IID_IHXPluginHandler, 0x00000200, 0xb4c8, 0x11d0, 0x99, 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
  695. DEFINE_GUID(IID_IHXPlugin2Handler, 0x00000201, 0xb4c8, 0x11d0, 0x99, 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
  696. #undef  INTERFACE
  697. #define INTERFACE   IHXPlugin2Handler
  698. DECLARE_INTERFACE_(IHXPlugin2Handler, IUnknown)
  699. {
  700.     /*
  701.      *  IUnknown methods
  702.      */
  703.     STDMETHOD(QueryInterface) (THIS_
  704. REFIID riid,
  705. void** ppvObj) PURE;
  706.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  707.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  708.     /*
  709.      * IHXPlugin2Handler Methods
  710.      */
  711.      /************************************************************************
  712.      * Method:
  713.      *     IHXPlugin2Handler::Init
  714.      *
  715.      * Purpose:    
  716.      *     Specifies the context and sets the pluginhandler in motion.
  717.      *
  718.      */
  719.     STDMETHOD(Init)    (THIS_ IUnknown* pContext) PURE;
  720.      
  721.      /************************************************************************
  722.      * Method:
  723.      *     IHXPlugin2Handler::GetNumPlugins2
  724.      *
  725.      * Purpose:    
  726.      *     Gets the info of a particular plugin.
  727.      *
  728.      */
  729.     STDMETHOD_(ULONG32,GetNumOfPlugins2)    (THIS) PURE;
  730.     
  731.     /************************************************************************
  732.      * Method:
  733.      *     IHXPlugin2Handler::GetPluginInfo
  734.      *
  735.      * Purpose:    
  736.      *     Gets the info of a particular plugin.
  737.      *
  738.      */
  739.     STDMETHOD(GetPluginInfo) (THIS_ 
  740. UINT32 unIndex, 
  741. REF(IHXValues*) /*OUT*/ Values) PURE;
  742.     /************************************************************************
  743.      * Method:
  744.      *     IHXPlugin2Handler::FlushCache()
  745.      *
  746.      * Purpose:    
  747.      *     Flushes the LRU cache -- Unloads all DLLs from memory 
  748.      *     which currenltly have a refcount of 0.
  749.      */
  750.     STDMETHOD(FlushCache) (THIS) PURE;
  751.     /************************************************************************
  752.      * Method:
  753.      *     IHXPlugin2Handler::SetCacheSize
  754.      *
  755.      * Purpose:    
  756.      *     This function sets the size of the Cache. The cache is 
  757.      *     initally set to 1000KB. To disable the cache simply set
  758.      *     the size to 0.If the cache is disabled a DLL will be 
  759.      *     unloaded whenever it's refcount becomes zero. Which MAY
  760.      *     cause performance problems.
  761.      */
  762.     STDMETHOD(SetCacheSize) (THIS_ ULONG32 nSizeKB) PURE;
  763.     /************************************************************************
  764.      * Method:
  765.      *     IHXPlugin2Handler::GetInstance
  766.      *
  767.      * Purpose:    
  768.      *     
  769.      *     This function will return a plugin instance given a plugin index.
  770.      *
  771.      */
  772.     STDMETHOD(GetInstance) (THIS_ UINT32 index, REF(IUnknown*) pUnknown) PURE; 
  773.     /************************************************************************
  774.      * Method:
  775.      *     IHXPlugin2Handler::FindIndexUsingValues
  776.      *
  777.      * Purpose:    
  778.      *     Finds a plugin  which matches the set of values given. An index
  779.      *     is returned which can be used to either get the values (using 
  780.      *     GetPluginInfo) or an instance can be created using GetPluing(). 
  781.      * 
  782.      */
  783.     STDMETHOD(FindIndexUsingValues)     (THIS_ IHXValues*, 
  784.     REF(UINT32) unIndex) PURE;
  785.     /************************************************************************
  786.      * Method:
  787.      *     IHXPlugin2Handler::FindPluginUsingValues
  788.      *
  789.      * Purpose:    
  790.      *     Finds a plugin  which matches the set of values given. A Plugin
  791.      *     instance is returned. 
  792.      *     
  793.      */
  794.     STDMETHOD(FindPluginUsingValues)     (THIS_ IHXValues*, 
  795.     REF(IUnknown*) pUnk) PURE;
  796.     
  797.     /************************************************************************
  798.      * Method:
  799.      *     IHXPlugin2Handler::FindIndexUsingStrings
  800.      *
  801.      * Purpose:    
  802.      *     Finds a plugin  which matches the set of values given. An index
  803.      *     is returned which can be used to either get the values (using 
  804.      *     GetPluginInfo) or an instance can be created using GetPluing(). 
  805.      *     NOTE: that a max of two values may be given.
  806.      */
  807.     STDMETHOD(FindIndexUsingStrings)     (THIS_ char* PropName1, 
  808.     char* PropVal1, 
  809.     char* PropName2, 
  810.     char* PropVal2, 
  811.     char* PropName3, 
  812.     char* PropVal3, 
  813.     REF(UINT32) unIndex) PURE;
  814.     /************************************************************************
  815.      * Method:
  816.      *     IHXPlugin2Handler::FindPluginUsingStrings
  817.      *
  818.      * Purpose:    
  819.      *     Finds a plugin  which matches the set of values given. A Plugin
  820.      *     instance is returned. 
  821.      *     NOTE: that a max of two values may be given.
  822.      */
  823.     STDMETHOD(FindPluginUsingStrings)     (THIS_ char* PropName1, 
  824.     char* PropVal1, 
  825.     char* PropName2, 
  826.     char* PropVal2, 
  827.     char* PropName3, 
  828.     char* PropVal3, 
  829.     REF(IUnknown*) pUnk) PURE;
  830.     /************************************************************************
  831.      * Method:
  832.      *     IHXPlugin2Handler::FindImplementationFromClassID
  833.      *
  834.      * Purpose:    
  835.      *     Finds a CommonClassFactory plugin which supports the 
  836.      *     ClassID given. An instance of the Class is returned. 
  837.      */
  838.     STDMETHOD(FindImplementationFromClassID)
  839.     (
  840. THIS_ 
  841. REFGUID GUIDClassID, 
  842. REF(IUnknown*) pIUnknownInstance
  843.     ) PURE;
  844.     /************************************************************************
  845.      * Method:
  846.      *     IHXPlugin2Handler::Close
  847.      *
  848.      * Purpose:    
  849.      *     A function which performs all of the functions of delete.
  850.      *     
  851.      *
  852.      */
  853.     
  854.     STDMETHOD(Close) (THIS) PURE; 
  855.     /************************************************************************
  856.      * Method:
  857.      *     IHXPlugin2Handler::SetRequiredPlugins
  858.      *
  859.      * Purpose:    
  860.      *     This function sets the required plugin list
  861.      *     
  862.      *
  863.      */
  864.     STDMETHOD(SetRequiredPlugins) (THIS_ const char** ppszRequiredPlugins) PURE;
  865. };
  866. // $Private:
  867. /****************************************************************************
  868.  * 
  869.  *  Interface:
  870.  * 
  871.  * IHXPluginHandler3
  872.  * 
  873.  *  Purpose:
  874.  * 
  875.  * Extensions to the IHXPlugin2Handler so we can interact with the 
  876.  * Gemini Object Broker
  877.  * 
  878.  *  IID_IHXPluginHandler3:
  879.  * 
  880.  *  {32B19771-2299-11d4-9503-00902790299C}
  881.  * 
  882.  */
  883. DEFINE_GUID( IID_IHXPluginHandler3, 0x32b19771, 0x2299, 0x11d4, 0x95, 0x3, 0x0, 0x90, 0x27, 0x90, 0x29, 0x9c);
  884. #undef  INTERFACE
  885. #define INTERFACE   IHXPluginHandler3
  886. DECLARE_INTERFACE_(IHXPluginHandler3, IUnknown)
  887. {
  888.     /************************************************************************
  889.      * Method:
  890.      *     IHXPluginHandler3::RegisterContext
  891.      *
  892.      * Purpose:    
  893.      *     Sets up the context without loading any plugin info
  894.      *
  895.      */
  896.     STDMETHOD( RegisterContext )( THIS_ IUnknown* pContext ) PURE;
  897.     /************************************************************************
  898.      * Method:
  899.      *     IHXPluginHandler3::AddPluginMountPoint
  900.      *
  901.      * Purpose:    
  902.      *     Sets up the plugins stored in this preferences object
  903.      *
  904.      */
  905.     STDMETHOD( AddPluginMountPoint )( THIS_ const char* pName, UINT32 majorVersion,
  906.     UINT32 minorVersion, IHXBuffer* pPath ) PURE;
  907.     /************************************************************************
  908.      * Method:
  909.      *     IHXPluginHandler3::RefreshPluginMountPoint
  910.      *
  911.      * Purpose:    
  912.      *      Refreshes plugin information associated with this 
  913.      *     preferences object
  914.      */
  915.     STDMETHOD( RefreshPluginMountPoint )( THIS_ const char* pName ) PURE;
  916.     /************************************************************************
  917.      * Method:
  918.      *     IHXPluginHandler3::RemovePluginMountPoint
  919.      *
  920.      * Purpose:    
  921.      *     Removes plugins associated with this preferences object
  922.      */
  923.     STDMETHOD( RemovePluginMountPoint )( THIS_ const char* pName ) PURE;
  924.     /************************************************************************
  925.      * Method:
  926.      *     IHXPluginHandler3::FindImplementationFromClassID
  927.      *
  928.      * Purpose:    
  929.      *     Finds a CommonClassFactory plugin which supports the 
  930.      *     ClassID given. An instance of the Class is returned. 
  931.      *     The plugin instance is initialized with the specified 
  932.      *     context
  933.      */
  934.     STDMETHOD( FindImplementationFromClassID )( THIS_ REFGUID GUIDClassID, 
  935.     REF(IUnknown*) pIUnknownInstance, IUnknown* pIUnkOuter, IUnknown* pContext ) PURE;
  936.     /************************************************************************
  937.      * Method:
  938.      *     IHXPluginHandler3::FindCLSIDFromName
  939.      *
  940.      * Purpose:    
  941.      *
  942.      *     Maps a text name to a CLSID based on information from 
  943.      *     component plugins
  944.      */
  945.     STDMETHOD( FindCLSIDFromName )( THIS_ const char* pName, REF(IHXBuffer*) pCLSID ) PURE;
  946.     /************************************************************************
  947.      * Method:
  948.      *     IHXPluginHandler3::FindGroupOfPluginsUsingValues
  949.      *
  950.      * Purpose:    
  951.      *     Builds a collection of plugins that match the criteria
  952.      *
  953.      */
  954.     STDMETHOD(FindGroupOfPluginsUsingValues)(THIS_ IHXValues* pValues, 
  955.     REF(IHXPluginSearchEnumerator*) pIEnumerator) PURE;
  956.     /************************************************************************
  957.      * Method:
  958.      *     IHXPluginHandler3::FindGroupOfPluginsUsingStrings
  959.      *
  960.      * Purpose:    
  961.      *     Builds a collection of plugins that match the criteria
  962.      *
  963.      */
  964.     STDMETHOD(FindGroupOfPluginsUsingStrings)(THIS_ char* PropName1, 
  965.     char* PropVal1, 
  966.     char* PropName2, 
  967.     char* PropVal2, 
  968.     char* PropName3, 
  969.     char* PropVal3, 
  970.     REF(IHXPluginSearchEnumerator*) pIEnumerator) PURE;
  971.     /************************************************************************
  972.      * Method:
  973.      *     IHXPluginHandler3::GetPlugin
  974.      *
  975.      * Purpose:    
  976.      *     Allocates a plugin based on index.  Supports aggregation
  977.      *
  978.      */
  979.     STDMETHOD(GetPlugin)(THIS_ ULONG32 ulIndex,
  980.     REF(IUnknown*) pIUnkResult,
  981.     IUnknown* pIUnkOuter ) PURE;
  982.     /************************************************************************
  983.      * Method:
  984.      *     IHXPluginHandler3::FindPluginUsingValues
  985.      *
  986.      * Purpose:    
  987.      *     Allocates a plugin based on criteria.  Supports aggregation
  988.      *
  989.      */
  990.     STDMETHOD(FindPluginUsingValues)(THIS_ IHXValues*, 
  991.     REF(IUnknown*) pIUnkResult, 
  992.     IUnknown* pIUnkOuter ) PURE;
  993.     /************************************************************************
  994.      * Method:
  995.      *     IHXPluginHandler3::FindPluginUsingStrings
  996.      *
  997.      * Purpose:    
  998.      *     Allocates a plugin based on criteria.  Supports aggregation
  999.      *
  1000.      */
  1001.     STDMETHOD(FindPluginUsingStrings)(THIS_ char* PropName1, 
  1002.     char* PropVal1, 
  1003.     char* PropName2, 
  1004.     char* PropVal2, 
  1005.     char* PropName3, 
  1006.     char* PropVal3, 
  1007.     REF(IUnknown*) pIUnkResult, 
  1008.     IUnknown* pIUnkOuter ) PURE;
  1009.     /************************************************************************
  1010.      * Method:
  1011.      *     IHXPluginHandler3::UnloadPluginFromClassID
  1012.      *
  1013.      * Purpose:    
  1014.      *     Finds a plugin from the classID and unloads it if it supports CanUnload2
  1015.  * and returns TRUE in response to query
  1016.      */
  1017.     STDMETHOD( UnloadPluginFromClassID )( THIS_ REFGUID GUIDClassID ) PURE;
  1018.      /************************************************************************
  1019.      * Method:
  1020.      *     IHXPluginHandler3::UnloadPackageByName
  1021.      *
  1022.      * Purpose:    
  1023.      *     finds a package from the name passed in and attempts to unload it.
  1024.      */
  1025.     STDMETHOD (UnloadPackageByName) (char const* pName) PURE;
  1026. };
  1027. // $EndPrivate.
  1028. // $Private:
  1029. /****************************************************************************
  1030.  * 
  1031.  *  Interface:
  1032.  * 
  1033.  * IHXPluginDatabase
  1034.  * 
  1035.  *  Purpose:
  1036.  * 
  1037.  * Extensions to the plugin handler for optimized searching
  1038.  * on a single key
  1039.  * 
  1040.  *  IID_IHXPluginDatabase:
  1041.  * 
  1042.  * {C2C65401-A478-11d4-9518-00902790299C}
  1043.  * 
  1044.  */
  1045. enum EPluginIndexType
  1046. {
  1047.     kIndex_StringType,
  1048.     kIndex_BufferType,
  1049.     kIndex_GUIDType,
  1050.     kIndex_MVStringType,
  1051.     kIndex_NumTypes
  1052. };
  1053. DEFINE_GUID( IID_IHXPluginDatabase, 0xc2c65401, 0xa478, 0x11d4, 0x95, 0x18, 0x0, 0x90, 0x27, 0x90, 0x29, 0x9c);
  1054. #undef  INTERFACE
  1055. #define INTERFACE   IHXPluginDatabase
  1056. DECLARE_INTERFACE_(IHXPluginDatabase, IUnknown)
  1057. {
  1058.     /************************************************************************
  1059.      * Method:
  1060.      *     IHXPluginDatabase::AddPluginIndex
  1061.      *
  1062.      * Purpose:    
  1063.      *     Create a new index in the plugin-handler
  1064.      *
  1065.      */
  1066.     STDMETHOD( AddPluginIndex ) ( THIS_ const char* pKeyName, EPluginIndexType indexType, BOOL bScanExisting ) PURE;
  1067.     
  1068.     /************************************************************************
  1069.      * Method:
  1070.      *     IHXPluginDatabase::RemovePluginIndex
  1071.      *
  1072.      * Purpose:    
  1073.      *     Remove an index from the plugin handler
  1074.      *
  1075.      */
  1076.     STDMETHOD( RemovePluginIndex )( THIS_ const char* pKeyName ) PURE;
  1077.     
  1078.     /************************************************************************
  1079.      * Method:
  1080.      *     IHXPluginDatabase::FindPluginInfoViaIndex
  1081.      *
  1082.      * Purpose:    
  1083.      *     Look up a plugin's info based on a single attribute.  Use an index if
  1084.      *     possible, otherwise defer to a linear search
  1085.      *
  1086.      */
  1087.     STDMETHOD( FindPluginInfoViaIndex )( THIS_ const char* pKeyName, const void* pValue, IHXValues** ppIInfo ) PURE;
  1088.     
  1089.     /************************************************************************
  1090.      * Method:
  1091.      *     IHXPluginDatabase::FindPluginSetViaIndex
  1092.      *
  1093.      * Purpose:    
  1094.      *     // XXXND  Should this take pValue?  Should it just return a list from an index?
  1095.      *     Find a set of plugins matching a single attribute
  1096.      *
  1097.      */
  1098.     STDMETHOD( FindPluginSetViaIndex )( THIS_ const char* pKeyName, const void* pValue, IHXPluginSearchEnumerator** ppIEnumerator ) PURE;
  1099.     
  1100.     /************************************************************************
  1101.      * Method:
  1102.      *     IHXPluginDatabase::FindPluginViaIndex
  1103.      *
  1104.      * Purpose:    
  1105.      *     Create a plugin based on a simple attribute.
  1106.      *
  1107.      */
  1108.     STDMETHOD( CreatePluginViaIndex )( THIS_ const char* pKeyName, const void* pValue, IUnknown** ppIUnkPlugin, IUnknown* pIUnkOuter ) PURE;
  1109. };
  1110. // $EndPrivate.
  1111. // $Private:
  1112. /****************************************************************************
  1113.  * 
  1114.  *  Interface:
  1115.  * 
  1116.  * IHXProxiedPugin
  1117.  * 
  1118.  *  Purpose:
  1119.  * 
  1120.  * Provides The IHXPlugin actually being used.
  1121.  * 
  1122.  *  IID_IHXProxiedPlugin:
  1123.  * 
  1124.  * {00000C10-0901-11d1-8B06-00A024406D59}
  1125.  * 
  1126.  */
  1127. DEFINE_GUID(IID_IHXProxiedPlugin, 0x00000C0A, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1128. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1129. #undef  INTERFACE
  1130. #define INTERFACE   IHXProxiedPlugin
  1131. DECLARE_INTERFACE_(IHXProxiedPlugin, IUnknown)
  1132. {
  1133.     /*
  1134.      * IUnknown methods
  1135.      */
  1136.     STDMETHOD(QueryInterface) (THIS_
  1137. REFIID riid,
  1138. void** ppvObj) PURE;
  1139.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1140.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1141.     /*
  1142.      * IHXProxiedPlugin methods
  1143.      */
  1144.     
  1145.     /************************************************************************
  1146.      * Method:
  1147.      *     IHXProxiedPlugin::GetProxiedPlugin
  1148.      * Purpose:
  1149.      *     Gets the Actual Plugin being used...
  1150.      */
  1151.     STDMETHOD(GetProxiedPlugin)(THIS_
  1152.     REF(IHXPlugin*) /*OUT*/ pPlugin) PURE;
  1153. };
  1154. // $EndPrivate.
  1155. // $Private:
  1156. /****************************************************************************
  1157.  * 
  1158.  * Component plugin property names
  1159.  *
  1160.  *   These attribute names are standard.  
  1161.  *
  1162.  * ComponentCLSID maps to an IHXBuffer value that contains the
  1163.  * binary CLSID for the component
  1164.  *
  1165.  * ComponentName maps to a string value that contains the tag or
  1166.  * actor name for the component
  1167.  *
  1168.  */
  1169. #define PLUGIN_COMPONENT_CLSID     "ComponentCLSID"
  1170. #define PLUGIN_COMPONENT_NAME     "ComponentName"
  1171. /****************************************************************************
  1172.  * 
  1173.  *  Interface: 
  1174.  * 
  1175.  * IHXComponentPlugin
  1176.  * 
  1177.  *  Purpose:
  1178.  * 
  1179.  *  Allows the plugin handler to iterator over multiple plugins in a DLL
  1180.  * 
  1181.  * {F8A31571-22AC-11d4-9503-00902790299C}
  1182.  * 
  1183.  */
  1184. DEFINE_GUID( IID_IHXComponentPlugin, 0xf8a31571, 0x22ac, 0x11d4, 0x95, 0x3, 0x0, 0x90, 0x27, 0x90, 0x29, 0x9c);
  1185. #undef  INTERFACE
  1186. #define INTERFACE   IHXComponentPlugin
  1187. DECLARE_INTERFACE_(IHXComponentPlugin, IUnknown)
  1188. {
  1189.     /*
  1190.      * IHXComponentPlugin methods
  1191.      */
  1192.     /************************************************************************
  1193.      * Method:
  1194.      *     IHXComponentPlugin::GetNumberComponents
  1195.      * Purpose:
  1196.      */
  1197.     STDMETHOD_(UINT32, GetNumComponents)(THIS) PURE;
  1198.     /************************************************************************
  1199.      * Method:
  1200.      *     IHXComponentPlugin::GetPackageName
  1201.      * Purpose:
  1202.      */
  1203.     STDMETHOD_(char const*, GetPackageName)(THIS) CONSTMETHOD PURE;
  1204.     /************************************************************************
  1205.      *  Method:
  1206.      *     IHXComponentPlugin::GetComponentInfoAtIndex
  1207.      *  Purpose:
  1208.      */
  1209.     STDMETHOD(GetComponentInfoAtIndex) (THIS_
  1210.     UINT32      /*IN*/  nIndex,
  1211.     REF(IHXValues*)  /*OUT*/ pInfo) PURE;
  1212.     /************************************************************************
  1213.      *  Method:
  1214.      *     IHXComponentPlugin::CreateComponentInstance
  1215.      *  Purpose:
  1216.      */
  1217.     STDMETHOD(CreateComponentInstance)(THIS_
  1218.     REFCLSID     /*IN*/  rclsid,
  1219.     REF(IUnknown*)  /*OUT*/ ppUnknown,
  1220.     IUnknown*     /*IN*/  pUnkOuter) PURE;
  1221. };
  1222. /****************************************************************************
  1223.  * 
  1224.  *  Interface: 
  1225.  * 
  1226.  * IHXPluginNamespace
  1227.  * 
  1228.  *  Purpose:
  1229.  * 
  1230.  *  Allows the plugin handler to retrieve a plugin's namespace
  1231.  * 
  1232.  * {F09E8891-8E2D-11d4-82DB-00D0B74C2D25}
  1233.  * 
  1234.  */
  1235. DEFINE_GUID(IID_IHXPluginNamespace, 0xf09e8891, 0x8e2d, 0x11d4, 0x82, 0xdb, 0x0, 0xd0, 0xb7, 0x4c, 0x2d, 0x25);
  1236. #undef  INTERFACE
  1237. #define INTERFACE   IHXPluginNamespace
  1238. DECLARE_INTERFACE_(IHXPluginNamespace, IUnknown)
  1239. {
  1240.     /************************************************************************
  1241.      *  Method:
  1242.      *     IHXPluginNamespace::GetPluginNamespace
  1243.      *  Purpose:
  1244.      */
  1245.     STDMETHOD(GetPluginNamespace) (THIS_
  1246. REF(IHXBuffer*)  /*OUT*/ pBuffer) PURE;
  1247. };
  1248. // $EndPrivate.
  1249. #endif /* _HXPLUGN_H_ */