hxpluginmanager.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:9k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxpluginmanager.h,v 1.1.2.1 2004/07/09 02:07:18 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _BASEHAND_H_
  50. #define _BASEHAND_H_
  51. #include "unkimp.h"
  52. #include "hxslist.h"
  53. #include "hxmap.h"
  54. #include "hxphand.h" //IHXPluginEnumerator
  55. #include "hxplugn.h" //IHXPlugin2Handler, IHXPluginHandler3, IHX4PluginHandler, IHXPlugin5Handler1
  56. typedef HX_RESULT (HXEXPORT_PTR FPCREATEINSTANCE) (IUnknown** /*OUT*/ ppIUnknown);
  57. typedef HX_RESULT (HXEXPORT_PTR FPSHUTDOWN) ();
  58. typedef HX_RESULT (HXEXPORT_PTR FPCANUNLOAD2) ();
  59. class CFindFile;
  60. class HXPluginArchiveReader;
  61. // class HXPluginManager
  62. class HXPluginManager 
  63. : public CUnknownIMP
  64. , public IHXPluginEnumerator
  65. , public IHXPlugin2Handler
  66. , public IHXPluginHandler3
  67. {
  68.     class HXPluginMountPoint;
  69.     class PluginDLL;
  70.     
  71.     friend class HXPluginEnumerator;
  72.     friend class HXPluginDLL;
  73.     friend class HXPlugin;
  74. public:
  75.    
  76.     enum eValueTypes
  77.     {
  78. eString,
  79. eBuffer,
  80. eInt
  81.     };
  82.     DECLARE_UNKNOWN_NOCREATE( HXPluginManager )
  83.     DECLARE_COM_CREATE_FUNCS( HXPluginManager )
  84.     HXPluginManager();
  85.     ~HXPluginManager();
  86.     //
  87.     // IHXPluginEnumerator
  88.     //
  89.     STDMETHOD_(ULONG32,GetNumOfPlugins) (THIS);
  90.     STDMETHOD(GetPlugin)   (THIS_
  91.     ULONG32     /*IN*/  ulIndex,
  92.     REF(IUnknown*)  /*OUT*/ pPlugin);
  93.     //
  94.     // IHXPlugin2Handler
  95.     //
  96.     STDMETHOD(Init)    (THIS_ IUnknown* pContext);
  97.     STDMETHOD_(ULONG32,GetNumOfPlugins2)    (THIS);
  98.     STDMETHOD(GetPluginInfo) (THIS_
  99. UINT32 unIndex,
  100. REF(IHXValues*) /*OUT*/ Values) ;
  101.     STDMETHOD(FlushCache) (THIS);
  102.     STDMETHOD(SetCacheSize) (THIS_ ULONG32 nSizeKB);
  103.     STDMETHOD(ReadFromRegistry)(THIS);
  104.     STDMETHOD(GetInstance) (THIS_ UINT32 index, REF(IUnknown*) ppUnknown);
  105.     STDMETHOD(FindIndexUsingValues)     (THIS_ IHXValues*,
  106.     REF(UINT32) unIndex);
  107.     STDMETHOD(FindPluginUsingValues)(THIS_ IHXValues*, REF(IUnknown*) pUnk);
  108.     STDMETHOD(FindIndexUsingStrings)     (THIS_ char* PropName1,
  109.     char* PropVal1,
  110.     char* PropName2,
  111.     char* PropVal2,
  112.     char* PropName3,
  113.     char* PropVal3,
  114.     REF(UINT32) unIndex);
  115.     STDMETHOD(FindPluginUsingStrings)     (THIS_ char* PropName1,
  116.     char* PropVal1,
  117.     char* PropName2,
  118.     char* PropVal2,
  119.     char* PropName3,
  120.     char* PropVal3,
  121.     REF(IUnknown*) pUnk);
  122.     STDMETHOD(FindImplementationFromClassID)(REFGUID GUIDClassID,REF(IUnknown*) pIUnknownInstance);
  123.     STDMETHOD(Close) (THIS);
  124.     STDMETHOD(SetRequiredPlugins) (THIS_ const char** ppszRequiredPlugins);
  125.     //
  126.     // IHXPluginHandler3
  127.     //
  128.     STDMETHOD( RegisterContext )( THIS_ IUnknown* pContext );
  129.     STDMETHOD( AddPluginMountPoint )( THIS_ const char* pName, UINT32 majorVersion,
  130.     UINT32 minorVersion, IHXBuffer* pPath );
  131.     STDMETHOD( RefreshPluginMountPoint )( THIS_ const char* pName );
  132.     STDMETHOD( RemovePluginMountPoint )( THIS_ const char* pName );
  133.     STDMETHOD( FindImplementationFromClassID )( THIS_ REFGUID GUIDClassID,
  134. REF(IUnknown*) pIUnknownInstance,
  135. IUnknown* pIUnkOuter, IUnknown* pContext );
  136.     STDMETHOD( FindCLSIDFromName )( THIS_ const char* pName, REF(IHXBuffer*) pCLSID );
  137.     STDMETHOD(FindGroupOfPluginsUsingValues)(THIS_ IHXValues* pValues,
  138.     REF(IHXPluginSearchEnumerator*) pIEnumerator);
  139.     STDMETHOD(FindGroupOfPluginsUsingStrings)(THIS_ char* PropName1,
  140.     char* PropVal1,
  141.     char* PropName2,
  142.     char* PropVal2,
  143.     char* PropName3,
  144.     char* PropVal3,
  145.     REF(IHXPluginSearchEnumerator*) pIEnumerator);
  146.     STDMETHOD(GetPlugin)(THIS_ ULONG32 ulIndex,
  147.     REF(IUnknown*) pIUnkResult,
  148.     IUnknown* pIUnkOuter );
  149.     STDMETHOD(FindPluginUsingValues)(THIS_ IHXValues*,
  150.     REF(IUnknown*) pIUnkResult,
  151.     IUnknown* pIUnkOuter );
  152.     STDMETHOD(FindPluginUsingStrings)(THIS_ char* PropName1,
  153.     char* PropVal1,
  154.     char* PropName2,
  155.     char* PropVal2,
  156.     char* PropName3,
  157.     char* PropVal3,
  158.     REF(IUnknown*) pIUnkResult,
  159.     IUnknown* pIUnkOuter );
  160.     STDMETHOD( UnloadPluginFromClassID )( THIS_ REFGUID GUIDClassID );
  161.     STDMETHOD (UnloadPackageByName) (const char* pName);
  162. public:
  163.  
  164.     HX_RESULT     Stat(const char* pszFilename, struct stat* pStatBuffer);
  165.     HX_RESULT     FindGroupOfPluginsUsingStrings(char* PropName1,
  166.     char* PropVal1,
  167.     char* PropName2,
  168.     char* PropVal2,
  169.     char* PropName3,
  170.     char* PropVal3,
  171.     REF(HXPluginEnumerator*) pEnumerator);
  172.     HX_RESULT     FindGroupOfPluginsUsingValues(IHXValues* pValues,
  173.     REF(HXPluginEnumerator*) pEnumerator);
  174.     HX_RESULT ReloadPluginsNoPropagate();
  175.     HX_RESULT ReloadPlugins();
  176.     HX_RESULT ReloadPlugins(const char* pMountPoint);
  177. private:
  178.      // implementation
  179.     HX_RESULT ReloadPluginsWithFindFile(
  180.                const char* pMountPoint, CFindFile* pFileFinder,
  181.                IHXBuffer* pPathBuffer, const char* pszPluginDir);
  182.     HX_RESULT SaveToArchive(const char* pszArchiveFile);
  183.     HX_RESULT LoadFromArchive(const char* pszArchiveFile, const char* pszMountPoint);
  184.     HX_RESULT LoadPluginDLLFromArchive(const char* pszMountPoint, HXPluginArchiveReader& ar);
  185.     HX_RESULT LoadOtherDLLFromArchive(const char* pszMountPoint, HXPluginArchiveReader& ar);
  186.     bool DoesDLLExist(const char* pszName, const char* pszMountPoint);    
  187.     void UnloadDeadDLLs();
  188.     void RebuildPluginList();
  189.     HX_RESULT AddToValues(IHXValues*, char* pPropName, char* pPropVal, eValueTypes eValueType);
  190. private:
  191.     CHXMapStringToString    m_mountPoints;
  192.     CHXSimpleList     m_pluginDlls;
  193.     CHXSimpleList     m_otherDlls;
  194.     CHXSimpleList     m_plugins;
  195.     IUnknown*     m_pContext;
  196.     IHXCommonClassFactory*  m_pClassFactory;
  197.     
  198. };
  199. // class HXPluginEnumerator
  200. class HXPluginEnumerator 
  201. : public CUnknownIMP
  202. , public IHXPluginSearchEnumerator
  203. {
  204. public: 
  205.     DECLARE_UNKNOWN_NOCREATE( HXPluginEnumerator )
  206. public:
  207.     HXPluginEnumerator();
  208.     virtual ~HXPluginEnumerator();
  209.     //
  210.     // IHXPluginSearchEnumerator
  211.     //
  212.     STDMETHOD_(UINT32, GetNumPlugins)(THIS);
  213.     STDMETHOD_(void, GoHead)(THIS);
  214.     STDMETHOD(GetNextPlugin)( THIS_ REF(IUnknown*) pIUnkResult, 
  215.     IUnknown* pIUnkOuter );
  216.     STDMETHOD(GetNextPluginInfo)( THIS_ REF(IHXValues*) pRetValues );
  217.     
  218.     STDMETHOD(GetPluginAt)( THIS_ UINT32 index, 
  219.     REF(IUnknown*) pIUnkResult, 
  220.     IUnknown* pIUnkOuter );
  221.     STDMETHOD(GetPluginInfoAt)( THIS_ UINT32 index, 
  222.     REF(IHXValues*) pRetValues );
  223. public:
  224.     void Add(HXPlugin* pPlugin);
  225. private:
  226.     CHXSimpleList   m_plugins;
  227.     UINT32     m_nIndex;
  228. };
  229. #endif /* _BASEHAND_H_ */