rmaplugn.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:18k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /****************************************************************************
  2.  * 
  3.  *  $Id: rmaplugn.h,v 1.1 2003/05/30 02:17:36 gabest Exp $
  4.  *
  5.  *  Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
  6.  *
  7.  *  http://www.real.com/devzone
  8.  *
  9.  *  This program contains proprietary 
  10.  *  information of Progressive Networks, Inc, and is licensed
  11.  *  subject to restrictions on use and distribution.
  12.  *
  13.  *
  14.  *  Plugin init / inspector interfaces
  15.  *
  16.  */
  17. #ifndef _RMAPLUGN_H_
  18. #define _RMAPLUGN_H_
  19. /*
  20.  * Forward declarations of some interfaces defined or used here-in.
  21.  */
  22. typedef _INTERFACE  IUnknown     IUnknown;
  23. typedef _INTERFACE  IRMAPlugin     IRMAPlugin;
  24. typedef _INTERFACE  IRMAPluginEnumerator     IRMAPluginEnumerator;
  25. typedef _INTERFACE  IRMAPluginChallenger     IRMAPluginChallenger;
  26. typedef _INTERFACE  IRMABuffer     IRMABuffer;
  27. typedef _INTERFACE  IRMAValues     IRMAValues;
  28. /****************************************************************************
  29.  * 
  30.  *  Function:
  31.  * 
  32.  * RMACreateInstance()
  33.  * 
  34.  *  Purpose:
  35.  * 
  36.  * Function implemented by all plugin DLL's to create an instance of 
  37.  * any of the objects supported by the DLL. This method is similar to 
  38.  * Window's CoCreateInstance() in its purpose, except that it only 
  39.  * creates objects from this plugin DLL.
  40.  *
  41.  * NOTE: Aggregation is never used. Therefore an outer unknown is
  42.  * not passed to this function, and you do not need to code for this
  43.  * situation.
  44.  * 
  45.  */
  46. #ifdef _MACINTOSH
  47. #pragma export on
  48. #endif
  49. STDAPI RMACreateInstance
  50. (
  51.     IUnknown**  /*OUT*/ ppIUnknown
  52. );
  53. #ifdef _MACINTOSH
  54. #pragma export off
  55. #endif
  56. /****************************************************************************
  57.  * 
  58.  *  Function:
  59.  * 
  60.  * RMAShutdown()
  61.  * 
  62.  *  Purpose:
  63.  * 
  64.  * Function implemented by all plugin DLL's to free any *global* 
  65.  * resources. This method is called just before the DLL is unloaded.
  66.  *
  67.  */
  68. #ifdef _MACINTOSH
  69. #pragma export on
  70. #endif
  71. STDAPI RMAShutdown(void);
  72. #ifdef _MACINTOSH
  73. #pragma export off
  74. #endif
  75. /****************************************************************************
  76.  * 
  77.  *  Interface:
  78.  * 
  79.  * IRMAPlugin
  80.  * 
  81.  *  Purpose:
  82.  * 
  83.  * Interface exposed by a plugin DLL to allow inspection of objects
  84.  * supported by the plugin DLL.
  85.  * 
  86.  *  IID_IRMAPlugin:
  87.  * 
  88.  * {00000C00-0901-11d1-8B06-00A024406D59}
  89.  * 
  90.  */
  91. DEFINE_GUID(IID_IRMAPlugin, 0x00000C00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  92. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  93. #undef  INTERFACE
  94. #define INTERFACE   IRMAPlugin
  95. DECLARE_INTERFACE_(IRMAPlugin, IUnknown)
  96. {
  97.     /*
  98.      * IUnknown methods
  99.      */
  100.     STDMETHOD(QueryInterface) (THIS_
  101. REFIID riid,
  102. void** ppvObj) PURE;
  103.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  104.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  105.     /*
  106.      * IRMAPlugin methods
  107.      */
  108.     /************************************************************************
  109.      * Method:
  110.      *     IRMAPlugin::GetPluginInfo
  111.      * Purpose:
  112.      *     Returns the basic information about this plugin. Including:
  113.      *
  114.      *     bMultipleLoad Whether or not this plugin can be instantiated
  115.      * multiple times. All File Formats must set
  116.      * this value to TRUE.  The only other type of
  117.      * plugin that can specify bMultipleLoad=TRUE is
  118.      * a filesystem plugin.  Any plugin that sets
  119.      * this flag to TRUE must not use global variables
  120.      * of any type.
  121.      *
  122.      * Setting this flag to TRUE implies that you
  123.      * accept that your plugin may be instantiated
  124.      * multiple times (possibly in different
  125.      * address spaces).  Plugins are instantiated
  126.      * multiple times only in the server (for
  127.      * performance reasons).
  128.      *
  129.      * An example of a plugin, that must set this
  130.      * flag to FALSE is a filesystem plugin that 
  131.      * uses a single TCP connection to communicate
  132.      * with a database.
  133.      *
  134.      *     pDescription which is used in about UIs (can be NULL)
  135.      *     pCopyright which is used in about UIs (can be NULL)
  136.      *     pMoreInfoURL which is used in about UIs (can be NULL)
  137.      *     ulVersionNumber The version of this plugin.
  138.      */
  139.     STDMETHOD(GetPluginInfo) (THIS_
  140. REF(BOOL)  /*OUT*/ bMultipleLoad,
  141. REF(const char*) /*OUT*/ pDescription,
  142. REF(const char*) /*OUT*/ pCopyright,
  143. REF(const char*) /*OUT*/ pMoreInfoURL,
  144. REF(ULONG32)  /*OUT*/ ulVersionNumber) PURE;
  145.     /************************************************************************
  146.      * Method:
  147.      *     IRMAPlugin::InitPlugin
  148.      * Purpose:
  149.      *     Initializes the plugin for use. This interface must always be
  150.      *     called before any other method is called. This is primarily needed 
  151.      *     so that the plugin can have access to the context for creation of
  152.      *     IRMABuffers and IMalloc.
  153.      */
  154.     STDMETHOD(InitPlugin)   (THIS_
  155.     IUnknown*   /*IN*/  pContext) PURE;
  156. };
  157. /****************************************************************************
  158.  * 
  159.  *  Interface:
  160.  * 
  161.  * IRMAPluginEnumerator
  162.  * 
  163.  *  Purpose:
  164.  * 
  165.  * provide methods to enumerate through all the plugins installed
  166.  * 
  167.  *  IID_IRMAPluginEnumerator:
  168.  * 
  169.  * {00000C01-0901-11d1-8B06-00A024406D59}
  170.  * 
  171.  */
  172. DEFINE_GUID(IID_IRMAPluginEnumerator, 0x00000C01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  173. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  174. #undef  INTERFACE
  175. #define INTERFACE   IRMAPluginEnumerator
  176. DECLARE_INTERFACE_(IRMAPluginEnumerator, IUnknown)
  177. {
  178.     /*
  179.      * IUnknown methods
  180.      */
  181.     STDMETHOD(QueryInterface) (THIS_
  182. REFIID riid,
  183. void** ppvObj) PURE;
  184.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  185.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  186.     /*
  187.      * IRMAPluginEnumerator methods
  188.      */
  189.     /************************************************************************
  190.      * Method:
  191.      *     IRMAPluginEnumerator::GetNumOfPlugins
  192.      *
  193.      * Purpose:    
  194.      *     return the number of plugins available
  195.      *
  196.      */
  197.     STDMETHOD_(ULONG32,GetNumOfPlugins) (THIS) PURE;
  198.     /************************************************************************
  199.      * Method:
  200.      *     IRMAPluginEnumerator::GetPlugin
  201.      * Purpose:
  202.      *     Return an instance (IUnknown) of the plugin
  203.      *
  204.      */
  205.     STDMETHOD(GetPlugin)   (THIS_
  206.    ULONG32    /*IN*/  ulIndex,
  207.    REF(IUnknown*)  /*OUT*/ pPlugin) PURE;
  208. };
  209. /****************************************************************************
  210.  * 
  211.  *  Interface:
  212.  * 
  213.  * IRMAPluginGroupEnumerator
  214.  * 
  215.  *  Purpose:
  216.  * 
  217.  * Provide a way to enumerate through all of the plugins which
  218.  * implement a specific interface.
  219.  * 
  220.  *  IID_IRMAPluginGroupEnumerator:
  221.  * 
  222.  * {00000C02-0901-11d1-8B06-00A024406D59}
  223.  * 
  224.  */
  225. DEFINE_GUID(IID_IRMAPluginGroupEnumerator, 0x00000C02, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  226. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  227. #undef  INTERFACE
  228. #define INTERFACE   IRMAPluginGroupEnumerator
  229. #define CLSID_IRMAPluginGroupEnumerator IID_IRMAPluginGroupEnumerator
  230. DECLARE_INTERFACE_(IRMAPluginGroupEnumerator, IUnknown)
  231. {
  232.     /*
  233.      * IUnknown methods
  234.      */
  235.     /*
  236.      * IRMAPluginGroupEnumerator methods
  237.      */
  238.     STDMETHOD(QueryInterface) (THIS_
  239. REFIID riid,
  240. void** ppvObj) PURE;
  241.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  242.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  243.     /******************************************************************
  244.      * Method:
  245.      *     IRMAPluginGroupEnumerator::Init
  246.      *
  247.      * Purpose:
  248.      *     tell the group enumerator which interface to group the plugins
  249.      *     into, this method must be called before the other methods can
  250.      *     be called.
  251.      *
  252.      */
  253.     STDMETHOD(Init)         (THIS_
  254.                             REFIID    iid) PURE;
  255.     /******************************************************************
  256.      * Method:
  257.      *     IRMAPluginGroupEnumerator::GetNumOfPlugins
  258.      *
  259.      * Purpose:
  260.      *     return the number of plugins available that support a
  261. particular
  262.      *     interface.
  263.      *
  264.      */
  265.     STDMETHOD_(ULONG32,GetNumOfPlugins) (THIS) PURE;
  266.     /******************************************************************
  267.      * Method:
  268.      *     IRMAPluginGroupEnumerator::GetPlugin
  269.      * Purpose:
  270.      *     Return an instance (IUnknown) of the plugin
  271.      *
  272.      */
  273.     STDMETHOD(GetPlugin)   (THIS_
  274.       UINT32    /*IN*/  ulIndex,
  275.       REF(IUnknown*)  /*OUT*/ pPlugin) PURE;
  276. };
  277. /****************************************************************************
  278.  * 
  279.  *  Interface:
  280.  * 
  281.  * IRMAPluginReloader
  282.  * 
  283.  *  Purpose:
  284.  * 
  285.  * Tells the client core to reload all plugins.
  286.  * 
  287.  *  IID_IRMAPluginReloader:
  288.  * 
  289.  * {00000C03-0901-11d1-8B06-00A024406D59}
  290.  * 
  291.  */
  292. DEFINE_GUID(IID_IRMAPluginReloader, 0x00000C03, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  293. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  294. #undef  INTERFACE
  295. #define INTERFACE   IRMAPluginReloader
  296. DECLARE_INTERFACE_(IRMAPluginReloader, IUnknown)
  297. {
  298.     /*
  299.      * IUnknown methods
  300.      */
  301.     STDMETHOD(QueryInterface) (THIS_
  302. REFIID riid,
  303. void** ppvObj) PURE;
  304.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  305.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  306.     /*
  307.      * IRMAPluginReloader methods
  308.      */
  309.     /************************************************************************
  310.      * Method:
  311.      *     IRMAPluginReloader::ReloadPlugins
  312.      * Purpose:    
  313.      *     Causes the client core to reload all plugins.
  314.      *
  315.      */
  316.     STDMETHOD(ReloadPlugins) (THIS) PURE;
  317. };
  318. /****************************************************************************
  319.  * 
  320.  *  Interface:
  321.  * 
  322.  * IRMAPluginFactory
  323.  * 
  324.  *  Purpose:
  325.  * 
  326.  * This interface is implemented by a plugin in order to have more then
  327.  *     one "RMA plugin" in a single DLL.  I.e., a plugin author could
  328.  *     use this interface to have 3 different file format plugins in
  329.  *     a single DLL.
  330.  * 
  331.  *  IID_IRMAPluginFactory:
  332.  * 
  333.  * {00000C04-0901-11d1-8B06-00A024406D59}
  334.  * 
  335.  */
  336. DEFINE_GUID(IID_IRMAPluginFactory, 0x00000C04, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  337. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  338. #undef  INTERFACE
  339. #define INTERFACE   IRMAPluginFactory
  340. DECLARE_INTERFACE_(IRMAPluginFactory, IUnknown)
  341. {
  342.     /*
  343.      * IUnknown methods
  344.      */
  345.     STDMETHOD(QueryInterface) (THIS_
  346.  REFIID riid,
  347.  void** ppvObj) PURE;
  348.     
  349.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  350.     
  351.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  352.     
  353.     /*
  354.      * IRMAPluginFactory methods
  355.      */
  356.     
  357.     /*****************************************************************
  358.      * Method:
  359.      *     IRMAPluginFactory::GetNumPlugins
  360.      * Purpose:
  361.      *     Report the number of Plugins within the DLL.
  362.      *
  363.      * Parameters:
  364.      */
  365.     STDMETHOD_(UINT16, GetNumPlugins) (THIS)  PURE;
  366.     /*****************************************************************
  367.      * Method:
  368.      *     IRMAPluginFactory::GetPlugin
  369.      * Purpose:
  370.      *     Returns an IUnknown interface to the requested plugin. 
  371.      *
  372.      * Parameters:
  373.      */
  374.     STDMETHOD(GetPlugin) (THIS_
  375.  UINT16  uIndex, 
  376.  IUnknown**   pPlugin) PURE;
  377. };
  378. /****************************************************************************
  379.  * 
  380.  *  Interface:
  381.  * 
  382.  * IRMAGenericPlugin
  383.  * 
  384.  *  Purpose:
  385.  * 
  386.  * Interface exposed by a plugin DLL to inform the client / server core
  387.  * that your plugin wishes to have InitPlugin called immediately.
  388.  *
  389.  *  IID_IRMAGenericPlugin:
  390.  * 
  391.  * {00000C09-0901-11d1-8B06-00A024406D59}
  392.  * 
  393.  */
  394. DEFINE_GUID(IID_IRMAGenericPlugin, 0x00000C09, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  395. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  396. #undef  INTERFACE
  397. #define INTERFACE   IRMAGenericPlugin
  398. DECLARE_INTERFACE_(IRMAGenericPlugin, IUnknown)
  399. {
  400.     /*
  401.      * IUnknown methods
  402.      */
  403.     STDMETHOD(QueryInterface) (THIS_
  404. REFIID riid,
  405. void** ppvObj) PURE;
  406.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  407.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  408.     /*
  409.      * IRMAGenericPlugin methods
  410.      */
  411.     STDMETHOD(IsGeneric) (THIS_
  412. REF(BOOL)  /*OUT*/ bIsGeneric) PURE;
  413. };
  414. DEFINE_GUID(IID_IRMAPluginHandler, 0x00000200, 0xb4c8, 0x11d0, 0x99, 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
  415. DEFINE_GUID(IID_IRMAPlugin2Handler, 0x00000201, 0xb4c8, 0x11d0, 0x99, 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
  416. #undef  INTERFACE
  417. #define INTERFACE   IRMAPlugin2Handler
  418. DECLARE_INTERFACE_(IRMAPlugin2Handler, IUnknown)
  419. {
  420.     /*
  421.      *  IUnknown methods
  422.      */
  423.     STDMETHOD(QueryInterface) (THIS_
  424. REFIID riid,
  425. void** ppvObj) PURE;
  426.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  427.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  428.     /*
  429.      * IRMAPlugin2Handler Methods
  430.      */
  431.      /************************************************************************
  432.      * Method:
  433.      *     IRMAPlugin2Handler::Init
  434.      *
  435.      * Purpose:    
  436.      *     Specifies the context and sets the pluginhandler in motion.
  437.      *
  438.      */
  439.     STDMETHOD(Init)    (THIS_ IUnknown* pContext) PURE;
  440.      
  441.      /************************************************************************
  442.      * Method:
  443.      *     IRMAPlugin2Handler::GetNumPlugins2
  444.      *
  445.      * Purpose:    
  446.      *     Gets the info of a particular plugin.
  447.      *
  448.      */
  449.     STDMETHOD_(ULONG32,GetNumOfPlugins2)    (THIS) PURE;
  450.     
  451.     /************************************************************************
  452.      * Method:
  453.      *     IRMAPlugin2Handler::GetPluginInfo
  454.      *
  455.      * Purpose:    
  456.      *     Gets the info of a particular plugin.
  457.      *
  458.      */
  459.     STDMETHOD(GetPluginInfo) (THIS_ 
  460. UINT32 unIndex, 
  461. REF(IRMAValues*) /*OUT*/ Values) PURE;
  462.     /************************************************************************
  463.      * Method:
  464.      *     IRMAPlugin2Handler::FlushCache()
  465.      *
  466.      * Purpose:    
  467.      *     Flushes the LRU cache -- Unloads all DLLs from memory 
  468.      *     which currenltly have a refcount of 0.
  469.      */
  470.     STDMETHOD(FlushCache) (THIS) PURE;
  471.     /************************************************************************
  472.      * Method:
  473.      *     IRMAPlugin2Handler::SetCacheSize
  474.      *
  475.      * Purpose:    
  476.      *     This function sets the size of the Cache. The cache is 
  477.      *     initally set to 1000KB. To disable the cache simply set
  478.      *     the size to 0.If the cache is disabled a DLL will be 
  479.      *     unloaded whenever it's refcount becomes zero. Which MAY
  480.      *     cause performance problems.
  481.      */
  482.     STDMETHOD(SetCacheSize) (THIS_ ULONG32 nSizeKB) PURE;
  483.     /************************************************************************
  484.      * Method:
  485.      *     IRMAPlugin2Handler::GetInstance
  486.      *
  487.      * Purpose:    
  488.      *     
  489.      *     This function will return a plugin instance given a plugin index.
  490.      *
  491.      */
  492.     STDMETHOD(GetInstance) (THIS_ UINT32 index, REF(IUnknown*) pUnknown) PURE; 
  493.     /************************************************************************
  494.      * Method:
  495.      *     IRMAPlugin2Handler::FindIndexUsingValues
  496.      *
  497.      * Purpose:    
  498.      *     Finds a plugin  which matches the set of values given. An index
  499.      *     is returned which can be used to either get the values (using 
  500.      *     GetPluginInfo) or an instance can be created using GetPluing(). 
  501.      * 
  502.      */
  503.     STDMETHOD(FindIndexUsingValues)     (THIS_ IRMAValues*, 
  504.     REF(UINT32) unIndex) PURE;
  505.     /************************************************************************
  506.      * Method:
  507.      *     IRMAPlugin2Handler::FindPluginUsingValues
  508.      *
  509.      * Purpose:    
  510.      *     Finds a plugin  which matches the set of values given. A Plugin
  511.      *     instance is returned. 
  512.      *     
  513.      */
  514.     STDMETHOD(FindPluginUsingValues)     (THIS_ IRMAValues*, 
  515.     REF(IUnknown*) pUnk) PURE;
  516.     
  517.     /************************************************************************
  518.      * Method:
  519.      *     IRMAPlugin2Handler::FindIndexUsingStrings
  520.      *
  521.      * Purpose:    
  522.      *     Finds a plugin  which matches the set of values given. An index
  523.      *     is returned which can be used to either get the values (using 
  524.      *     GetPluginInfo) or an instance can be created using GetPluing(). 
  525.      *     NOTE: that a max of two values may be given.
  526.      */
  527.     STDMETHOD(FindIndexUsingStrings)     (THIS_ char* PropName1, 
  528.     char* PropVal1, 
  529.     char* PropName2, 
  530.     char* PropVal2, 
  531.     char* PropName3, 
  532.     char* PropVal3, 
  533.     REF(UINT32) unIndex) PURE;
  534.     /************************************************************************
  535.      * Method:
  536.      *     IRMAPlugin2Handler::FindPluginUsingStrings
  537.      *
  538.      * Purpose:    
  539.      *     Finds a plugin  which matches the set of values given. A Plugin
  540.      *     instance is returned. 
  541.      *     NOTE: that a max of two values may be given.
  542.      */
  543.     STDMETHOD(FindPluginUsingStrings)     (THIS_ char* PropName1, 
  544.     char* PropVal1, 
  545.     char* PropName2, 
  546.     char* PropVal2, 
  547.     char* PropName3, 
  548.     char* PropVal3, 
  549.     REF(IUnknown*) pUnk) PURE;
  550.     /************************************************************************
  551.      * Method:
  552.      *     IRMAPlugin2Handler::FindImplementationFromClassID
  553.      *
  554.      * Purpose:    
  555.      *     Finds a CommonClassFactory plugin which supports the 
  556.      *     ClassID given. An instance of the Class is returned. 
  557.      */
  558.     STDMETHOD(FindImplementationFromClassID)
  559.     (
  560. THIS_ 
  561. REFGUID GUIDClassID, 
  562. REF(IUnknown*) pIUnknownInstance
  563.     ) PURE;
  564.     /************************************************************************
  565.      * Method:
  566.      *     IRMAPlugin2Handler::Close
  567.      *
  568.      * Purpose:    
  569.      *     A function which performs all of the functions of delete.
  570.      *     
  571.      *
  572.      */
  573.     
  574.     STDMETHOD(Close) (THIS) PURE; 
  575.     /************************************************************************
  576.      * Method:
  577.      *     IRMAPlugin2Handler::SetRequiredPlugins
  578.      *
  579.      * Purpose:    
  580.      *     This function sets the required plugin list
  581.      *     
  582.      *
  583.      */
  584.     STDMETHOD(SetRequiredPlugins) (THIS_ const char** ppszRequiredPlugins) PURE;
  585. };
  586. #endif /* _RMAPLUGN_H_ */