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

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 _BASEHAND_H_
  36. #define _BASEHAND_H_
  37. #include "unkimp.h"
  38. #include "hxslist.h"
  39. #include "hxmap.h"
  40. #include "hxphand.h" //IHXPluginEnumerator
  41. #include "hxplugn.h" //IHXPlugin2Handler, IHXPluginHandler3, IHX4PluginHandler, IHXPlugin5Handler1
  42. typedef HX_RESULT (HXEXPORT_PTR FPCREATEINSTANCE) (IUnknown** /*OUT*/ ppIUnknown);
  43. typedef HX_RESULT (HXEXPORT_PTR FPSHUTDOWN) ();
  44. typedef HX_RESULT (HXEXPORT_PTR FPCANUNLOAD2) ();
  45. class CFindFile;
  46. class HXPluginArchiveReader;
  47. // class HXPluginManager
  48. class HXPluginManager 
  49. : public CUnknownIMP
  50. , public IHXPluginEnumerator
  51. , public IHXPlugin2Handler
  52. , public IHXPluginHandler3
  53. {
  54.     class HXPluginMountPoint;
  55.     class PluginDLL;
  56.     
  57.     friend class HXPluginEnumerator;
  58.     friend class HXPluginDLL;
  59.     friend class HXPlugin;
  60. public:
  61.    
  62.     enum eValueTypes
  63.     {
  64. eString,
  65. eBuffer,
  66. eInt
  67.     };
  68.     DECLARE_UNKNOWN_NOCREATE( HXPluginManager )
  69.     DECLARE_COM_CREATE_FUNCS( HXPluginManager )
  70.     HXPluginManager();
  71.     ~HXPluginManager();
  72.     //
  73.     // IHXPluginEnumerator
  74.     //
  75.     STDMETHOD_(ULONG32,GetNumOfPlugins) (THIS);
  76.     STDMETHOD(GetPlugin)   (THIS_
  77.     ULONG32     /*IN*/  ulIndex,
  78.     REF(IUnknown*)  /*OUT*/ pPlugin);
  79.     //
  80.     // IHXPlugin2Handler
  81.     //
  82.     STDMETHOD(Init)    (THIS_ IUnknown* pContext);
  83.     STDMETHOD_(ULONG32,GetNumOfPlugins2)    (THIS);
  84.     STDMETHOD(GetPluginInfo) (THIS_
  85. UINT32 unIndex,
  86. REF(IHXValues*) /*OUT*/ Values) ;
  87.     STDMETHOD(FlushCache) (THIS);
  88.     STDMETHOD(SetCacheSize) (THIS_ ULONG32 nSizeKB);
  89.     STDMETHOD(ReadFromRegistry)(THIS);
  90.     STDMETHOD(GetInstance) (THIS_ UINT32 index, REF(IUnknown*) ppUnknown);
  91.     STDMETHOD(FindIndexUsingValues)     (THIS_ IHXValues*,
  92.     REF(UINT32) unIndex);
  93.     STDMETHOD(FindPluginUsingValues)(THIS_ IHXValues*, REF(IUnknown*) pUnk);
  94.     STDMETHOD(FindIndexUsingStrings)     (THIS_ char* PropName1,
  95.     char* PropVal1,
  96.     char* PropName2,
  97.     char* PropVal2,
  98.     char* PropName3,
  99.     char* PropVal3,
  100.     REF(UINT32) unIndex);
  101.     STDMETHOD(FindPluginUsingStrings)     (THIS_ char* PropName1,
  102.     char* PropVal1,
  103.     char* PropName2,
  104.     char* PropVal2,
  105.     char* PropName3,
  106.     char* PropVal3,
  107.     REF(IUnknown*) pUnk);
  108.     STDMETHOD(FindImplementationFromClassID)(REFGUID GUIDClassID,REF(IUnknown*) pIUnknownInstance);
  109.     STDMETHOD(Close) (THIS);
  110.     STDMETHOD(SetRequiredPlugins) (THIS_ const char** ppszRequiredPlugins);
  111.     //
  112.     // IHXPluginHandler3
  113.     //
  114.     STDMETHOD( RegisterContext )( THIS_ IUnknown* pContext );
  115.     STDMETHOD( AddPluginMountPoint )( THIS_ const char* pName, UINT32 majorVersion,
  116.     UINT32 minorVersion, IHXBuffer* pPath );
  117.     STDMETHOD( RefreshPluginMountPoint )( THIS_ const char* pName );
  118.     STDMETHOD( RemovePluginMountPoint )( THIS_ const char* pName );
  119.     STDMETHOD( FindImplementationFromClassID )( THIS_ REFGUID GUIDClassID,
  120. REF(IUnknown*) pIUnknownInstance,
  121. IUnknown* pIUnkOuter, IUnknown* pContext );
  122.     STDMETHOD( FindCLSIDFromName )( THIS_ const char* pName, REF(IHXBuffer*) pCLSID );
  123.     STDMETHOD(FindGroupOfPluginsUsingValues)(THIS_ IHXValues* pValues,
  124.     REF(IHXPluginSearchEnumerator*) pIEnumerator);
  125.     STDMETHOD(FindGroupOfPluginsUsingStrings)(THIS_ char* PropName1,
  126.     char* PropVal1,
  127.     char* PropName2,
  128.     char* PropVal2,
  129.     char* PropName3,
  130.     char* PropVal3,
  131.     REF(IHXPluginSearchEnumerator*) pIEnumerator);
  132.     STDMETHOD(GetPlugin)(THIS_ ULONG32 ulIndex,
  133.     REF(IUnknown*) pIUnkResult,
  134.     IUnknown* pIUnkOuter );
  135.     STDMETHOD(FindPluginUsingValues)(THIS_ IHXValues*,
  136.     REF(IUnknown*) pIUnkResult,
  137.     IUnknown* pIUnkOuter );
  138.     STDMETHOD(FindPluginUsingStrings)(THIS_ char* PropName1,
  139.     char* PropVal1,
  140.     char* PropName2,
  141.     char* PropVal2,
  142.     char* PropName3,
  143.     char* PropVal3,
  144.     REF(IUnknown*) pIUnkResult,
  145.     IUnknown* pIUnkOuter );
  146.     STDMETHOD( UnloadPluginFromClassID )( THIS_ REFGUID GUIDClassID );
  147.     STDMETHOD (UnloadPackageByName) (const char* pName);
  148. public:
  149.  
  150.     HX_RESULT     Stat(const char* pszFilename, struct stat* pStatBuffer);
  151.     HX_RESULT     FindGroupOfPluginsUsingStrings(char* PropName1,
  152.     char* PropVal1,
  153.     char* PropName2,
  154.     char* PropVal2,
  155.     char* PropName3,
  156.     char* PropVal3,
  157.     REF(HXPluginEnumerator*) pEnumerator);
  158.     HX_RESULT     FindGroupOfPluginsUsingValues(IHXValues* pValues,
  159.     REF(HXPluginEnumerator*) pEnumerator);
  160.     HX_RESULT ReloadPluginsNoPropagate();
  161.     HX_RESULT ReloadPlugins();
  162.     HX_RESULT ReloadPlugins(const char* pMountPoint);
  163. private:
  164.      // implementation
  165.     HX_RESULT ReloadPluginsWithFindFile(
  166.                const char* pMountPoint, CFindFile* pFileFinder,
  167.                IHXBuffer* pPathBuffer, const char* pszPluginDir);
  168.     HX_RESULT SaveToArchive(const char* pszArchiveFile);
  169.     HX_RESULT LoadFromArchive(const char* pszArchiveFile, const char* pszMountPoint);
  170.     HX_RESULT LoadPluginDLLFromArchive(const char* pszMountPoint, HXPluginArchiveReader& ar);
  171.     HX_RESULT LoadOtherDLLFromArchive(const char* pszMountPoint, HXPluginArchiveReader& ar);
  172.     bool DoesDLLExist(const char* pszName, const char* pszMountPoint);    
  173.     void UnloadDeadDLLs();
  174.     void RebuildPluginList();
  175.     HX_RESULT AddToValues(IHXValues*, char* pPropName, char* pPropVal, eValueTypes eValueType);
  176. private:
  177.     CHXMapStringToString    m_mountPoints;
  178.     CHXSimpleList     m_pluginDlls;
  179.     CHXSimpleList     m_otherDlls;
  180.     CHXSimpleList     m_plugins;
  181.     IUnknown*     m_pContext;
  182.     IHXCommonClassFactory*  m_pClassFactory;
  183.     
  184. };
  185. // class HXPluginEnumerator
  186. class HXPluginEnumerator 
  187. : public CUnknownIMP
  188. , public IHXPluginSearchEnumerator
  189. {
  190. public: 
  191.     DECLARE_UNKNOWN_NOCREATE( HXPluginEnumerator )
  192. public:
  193.     HXPluginEnumerator();
  194.     virtual ~HXPluginEnumerator();
  195.     //
  196.     // IHXPluginSearchEnumerator
  197.     //
  198.     STDMETHOD_(UINT32, GetNumPlugins)(THIS);
  199.     STDMETHOD_(void, GoHead)(THIS);
  200.     STDMETHOD(GetNextPlugin)( THIS_ REF(IUnknown*) pIUnkResult, 
  201.     IUnknown* pIUnkOuter );
  202.     STDMETHOD(GetNextPluginInfo)( THIS_ REF(IHXValues*) pRetValues );
  203.     
  204.     STDMETHOD(GetPluginAt)( THIS_ UINT32 index, 
  205.     REF(IUnknown*) pIUnkResult, 
  206.     IUnknown* pIUnkOuter );
  207.     STDMETHOD(GetPluginInfoAt)( THIS_ UINT32 index, 
  208.     REF(IHXValues*) pRetValues );
  209. public:
  210.     void Add(HXPlugin* pPlugin);
  211. private:
  212.     CHXSimpleList   m_plugins;
  213.     UINT32     m_nIndex;
  214. };
  215. #endif /* _BASEHAND_H_ */