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

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 HXPLUGINDLL_H__
  36. #define HXPLUGINDLL_H__
  37. #include "hxstring.h"
  38. #include "hxtypes.h"
  39. #include "hxcom.h"
  40. #include "unkimp.h"
  41. #include "hxslist.h"
  42. class HXPluginManager;
  43. class HXPluginArchiveReader;
  44. class HXPluginArchiveWriter;
  45. typedef HX_RESULT (HXEXPORT_PTR FPCREATEINSTANCE) (IUnknown** /*OUT*/ ppIUnknown);
  46. typedef HX_RESULT (HXEXPORT_PTR FPSHUTDOWN) ();
  47. typedef HX_RESULT (HXEXPORT_PTR FPCANUNLOAD2) ();
  48. //
  49. // used to identify plugin type when plugin object is written to/read from archive
  50. //
  51. enum
  52. {
  53.     ARCHIVE_ID_OTHER_DLL = 1,
  54.     ARCHIVE_ID_PLUGIN_DLL
  55. };
  56. // class HXOtherDLL
  57. class HXOtherDLL
  58. : public CUnknownIMP
  59. {
  60. public:
  61.     DECLARE_UNKNOWN_NOCREATE(HXPluginDLL)
  62. public:
  63.     HXOtherDLL(const char* pszFileName, const char* pszMountPoint);
  64.     HXOtherDLL(const char* pszMountPoint, HXPluginArchiveReader& ar);
  65.     const CHXString& GetMountPoint() const;
  66.     const CHXString& GetFileName() const;
  67.     void Archive(HXPluginArchiveWriter& ar);
  68. private:
  69.     CHXString m_strFileName;
  70.     CHXString m_strMountPoint;
  71. };
  72. inline 
  73. const CHXString& HXOtherDLL::GetMountPoint() const { return m_strMountPoint; }
  74. inline
  75. const CHXString& HXOtherDLL::GetFileName() const { return m_strFileName; }
  76. // class HXPluginDLL
  77. class HXPluginDLL 
  78. : public CUnknownIMP
  79. {
  80. public:
  81.     DECLARE_UNKNOWN_NOCREATE(HXPluginDLL)
  82. public:
  83.     HXPluginDLL(IUnknown* pContext, const char* pszFileName, const char* pszMountPoint);
  84.     HXPluginDLL(IUnknown* pContext, const char* pszMountPoint, HXPluginArchiveReader& ar);
  85.     ~HXPluginDLL();
  86.     void Archive(HXPluginArchiveWriter& ar);
  87.     HX_RESULT Load();
  88.     HX_RESULT Unload(bool bForce = false);
  89.     BOOL IsLoaded();
  90.     HX_RESULT CreateInstance( IUnknown** ppUnk, UINT32 uIndex );
  91.     const CHXString& GetMountPoint() const;
  92.     const CHXString& GetFileName() const;
  93.     UINT32 GetNumPlugins();
  94.     void AddPlugins(CHXSimpleList& list);
  95.     
  96. private:
  97. // implementation
  98.     void Init(IUnknown* pContext);
  99.     HX_RESULT CreatePlugins();
  100.     void CreateComponentPlugins(IHXComponentPlugin* pComponentPlugin);
  101. private:
  102.     FPCREATEINSTANCE m_fpCreateInstance;
  103.     FPSHUTDOWN m_fpShutdown;
  104.     FPCANUNLOAD2 m_fCanUnload;
  105.     CHXString           m_strMountPoint;
  106.     CHXString           m_strFileName;
  107.  
  108.     UINT16 m_pluginCount;
  109.     bool m_bHasFactory;
  110.     bool m_bLoaded;
  111.     DLLAccess* m_pDLLAccess;
  112.     CHXSimpleList m_plugins;
  113.     IUnknown*           m_pContext;
  114.     IHXCommonClassFactory*  m_pClassFactory;
  115. };
  116. inline
  117. const CHXString& HXPluginDLL::GetMountPoint() const 
  118.     return m_strMountPoint; 
  119. }
  120. inline
  121. const CHXString& HXPluginDLL::GetFileName() const 
  122.     return m_strFileName; 
  123. }
  124. inline
  125. UINT32 HXPluginDLL::GetNumPlugins() 
  126.     return m_pluginCount; 
  127. }
  128. #endif /* HXPLUGINDLL_H__ */