siteplug.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:7k
源码类别:

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. #if defined(_UNIX) && !defined(_MAC_UNIX)
  36. //XXXSMJ This INITGUID probably needs to go
  37. #  define INITGUID
  38. # if !defined(QWS)
  39. #include "hlxclib/string.h"
  40. #   include <X11/Xlib.h>
  41. #   include <X11/Xutil.h>
  42. #   include <X11/Xos.h>
  43. #endif /* !defined(QWS) */
  44. #endif //_UNIX
  45. #ifdef _SYMBIAN
  46. # define INITGUID
  47. #endif
  48. #include "hxcom.h"
  49. #include "hxtypes.h"
  50. #include "hxwintyp.h"
  51. #include "hxplugn.h"
  52. #include "hxmap.h"
  53. #include "hxslist.h"
  54. #include "ihxpckts.h"
  55. #include "hxwin.h"
  56. #include "hxvsurf.h"
  57. #include "chxpckts.h"
  58. #include "siteplug.h"
  59. #include "dllpath.h"
  60. #include "hxfiles.h"
  61. #include "hxmon.h"
  62. #include "hxver.h"
  63. #include "hxprefs.h"
  64. #include "hxcore.h"
  65. #include "hxupgrd.h"
  66. #if defined (HELIX_FEATURE_MINI_SITE)
  67. # include "minisite.h"
  68. #else //HELIX_FEATURE_MINI_SITE
  69. # include "basesite.h"
  70. # if defined(_UNIX) && !defined(_MAC_UNIX)
  71. #  include "hxcmenu.h"
  72. #  include "unixsite.h"
  73. # endif
  74. # if defined(_MACINTOSH) || defined(_MAC_UNIX)
  75. #  include "platform/mac/macsite.h"
  76. # endif
  77. # ifdef _WINDOWS
  78. #  include "winsite.h"
  79. # endif
  80. #endif //HELIX_FEATURE_MINI_SITE
  81. #include "site.ver"
  82. #include "hxassert.h"
  83. #include "hxheap.h"
  84. #ifdef _DEBUG
  85. #undef HX_THIS_FILE
  86. static const char HX_THIS_FILE[] = __FILE__;
  87. #endif
  88. const char* const SiteSurfFactory::zm_pDescription = "Surface/Site Window Factory Plugin";
  89. const char* const SiteSurfFactory::zm_pCopyright   = HXVER_COPYRIGHT;
  90. const char* const SiteSurfFactory::zm_pMoreInfoURL  = "http://www.real.com";
  91. ENABLE_DLLACCESS_PATHS(SiteSurf);
  92. /****************************************************************************
  93.  * 
  94.  *  Function:
  95.  * 
  96.  * HXCreateInstance()
  97.  * 
  98.  *  Purpose:
  99.  * 
  100.  * Function implemented by all plugin DLL's to create an instance of 
  101.  * any of the objects supported by the DLL. This method is similar to 
  102.  * Window's CoCreateInstance() in its purpose, except that it only 
  103.  * creates objects from this plugin DLL.
  104.  *
  105.  * NOTE: Aggregation is never used. Therefore and outer unknown is
  106.  * not passed to this function, and you do not need to code for this
  107.  * situation.
  108.  * 
  109.  */
  110. STDAPI ENTRYPOINT(HXCREATEINSTANCE)
  111. (
  112.     IUnknown**  /*OUT*/ ppIUnknown
  113. )
  114. {
  115.     *ppIUnknown = (IUnknown*)(IHXPlugin*)new SiteSurfFactory();
  116.     if (*ppIUnknown)
  117.     {
  118. (*ppIUnknown)->AddRef();
  119. return HXR_OK;
  120.     }
  121.     return HXR_OUTOFMEMORY;
  122. }
  123. SiteSurfFactory::SiteSurfFactory()
  124.     : m_pContext(NULL)
  125. {
  126.     m_lRefCount = 0;
  127. }
  128. SiteSurfFactory::~SiteSurfFactory()
  129. {
  130.     if (m_pContext)
  131.     {
  132. m_pContext->Release();
  133. m_pContext = NULL;
  134.     }
  135. }
  136. STDMETHODIMP
  137. SiteSurfFactory::QueryInterface(REFIID riid, void** ppvObj)
  138. {
  139.     if(IsEqualIID(riid, IID_IUnknown))
  140.     {
  141. AddRef();
  142. *ppvObj = (IUnknown*)(IHXCommonClassFactory*)this;
  143. return HXR_OK;
  144.     }
  145.     else if(IsEqualIID(riid, IID_IHXPlugin))
  146.     {
  147. AddRef();
  148. *ppvObj = (IHXPlugin*)this;
  149. return HXR_OK;
  150.     }
  151.     else if(IsEqualIID(riid, IID_IHXCommonClassFactory))
  152.     {
  153. AddRef();
  154. *ppvObj = (IHXCommonClassFactory*)this;
  155. return HXR_OK;
  156.     }
  157.     *ppvObj = NULL;
  158.     return HXR_NOINTERFACE;
  159. }
  160. STDMETHODIMP_(ULONG32)
  161. SiteSurfFactory::AddRef()
  162. {
  163.     return InterlockedIncrement(&m_lRefCount);
  164. }
  165. STDMETHODIMP_(ULONG32)
  166. SiteSurfFactory::Release()
  167.     if (InterlockedDecrement(&m_lRefCount) > 0)
  168.     {
  169.         return m_lRefCount;
  170.     }
  171.     delete this;
  172.     return 0;
  173. }
  174.     
  175. STDMETHODIMP
  176. SiteSurfFactory::InitPlugin(IUnknown* pContext)
  177. {
  178.     m_pContext = pContext;
  179.     if(m_pContext)
  180. m_pContext->AddRef();
  181.     return HXR_OK;
  182. }
  183. STDMETHODIMP
  184. SiteSurfFactory::GetPluginInfo(REF(BOOL) bMultipleLoad,
  185.        REF(const char*) pDescription,
  186.        REF(const char*) pCopyright,
  187.        REF(const char*) pMoreInfoURL,
  188.        REF(ULONG32)     ulVersionNumber)
  189. {
  190.     pDescription = zm_pDescription;
  191.     pCopyright   = zm_pCopyright;
  192.     pMoreInfoURL = zm_pMoreInfoURL;
  193.     ulVersionNumber = TARVER_ULONG32_VERSION;
  194.     return HXR_OK;
  195. }
  196. STDMETHODIMP
  197. SiteSurfFactory::CreateInstance(REFCLSID rclsid,
  198. void** ppUnknown)
  199. {
  200.     if(IsEqualIID(rclsid, CLSID_IHXSiteWindowed))
  201.     {
  202.         *ppUnknown = (IUnknown*)(IHXSiteWindowed*)(
  203. #if defined (HELIX_FEATURE_MINI_SITE)     
  204.             CMiniBaseSite::CreateSite(m_pContext));
  205. #else
  206.             CHXBaseSite::CreateSite(m_pContext));
  207. #endif //HELIX_FEATURE_MINI_SITE
  208. return ((IUnknown*)*ppUnknown)->QueryInterface(IID_IHXSiteWindowed,
  209.        (void**)ppUnknown);
  210.     }
  211. #if defined(_UNIX) && !defined(_MAC_UNIX) && !defined(HELIX_FEATURE_MINI_SITE)
  212.     else if(IsEqualIID(rclsid, CLSID_IHXSiteEventHandler))
  213.     {
  214. *ppUnknown = (IUnknown*)(IHXSiteEventHandler*)(
  215.     new CHXSiteEventHandler(m_pContext));
  216. return ((IUnknown*)*ppUnknown)->QueryInterface(IID_IHXSiteEventHandler,
  217.        (void**)ppUnknown);
  218.     }
  219. #endif
  220.     *ppUnknown = NULL;
  221.     return HXR_NOINTERFACE;
  222. }
  223. STDMETHODIMP SiteSurfFactory::CreateInstanceAggregatable( REFCLSID rclsid,
  224.                                                           REF(IUnknown*) ppUnknown,
  225.                                                           IUnknown* pUnkOuter)
  226. {
  227.    HX_ASSERT( "This isn't implementedn" );
  228.    return HXR_FAIL;
  229. }
  230. STDAPI ENTRYPOINT(CanUnload2)(void)
  231. {
  232.     return (CHXBaseCountingObject::ObjectsActive() ? HXR_FAIL : HXR_OK);
  233. }