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

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 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 RealNetworks Community Source License 
  8.  * Version 1.0 (the "License"). You may not use this file except in 
  9.  * compliance with the License executed by both you and RealNetworks.  You 
  10.  * may obtain a copy of the License at  
  11.  * http://www.helixcommunity.org/content/rcsl.  You may also obtain a 
  12.  * copy of the License by contacting RealNetworks directly.  Please see the 
  13.  * License for the rights, obligations and limitations governing use of the 
  14.  * contents of the file. 
  15.  *  
  16.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  17.  * developer of the Original Code and owns the copyrights in the portions 
  18.  * it created. 
  19.  *  
  20.  * This file, and the files included with this file, is distributed and made 
  21.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  22.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  23.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  24.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.  
  25.  * 
  26.  * Technology Compatibility Kit Test Suite(s) Location: 
  27.  *    http://www.helixcommunity.org/content/tck 
  28.  * 
  29.  * Contributor(s): 
  30.  *  
  31.  * ***** END LICENSE BLOCK ***** */ 
  32. //  $Id: xmlccf.cpp,v 1.5 2003/09/03 15:41:41 ehyche Exp $
  33. /****************************************************************************
  34.  *  hxxml plugin
  35.  */
  36. #define INITGUID 1
  37. #include "hxcom.h"
  38. #include "hxtypes.h"
  39. #include "ihxpckts.h"
  40. #include "hxplugn.h"
  41. #include "hxcomm.h"
  42. #include "hxxml.h"
  43. #include "hxver.h"
  44. #include "hxerror.h"
  45. #include "hxassert.h"
  46. #include "hxperf.h"
  47. #undef INITGUID
  48. #ifdef _DEBUG
  49. #undef HX_THIS_FILE
  50. static const char HX_THIS_FILE[] = __FILE__;
  51. #endif
  52. #include "xmlparse.h"
  53. #include "expatprs.h"
  54. #include "xmlccf.h"
  55. #include "hxxml.ver"
  56. #if !defined(_SYMBIAN)
  57. HX_ENABLE_CHECKPOINTS_FOR_MODULE( "Rnxmllib", "RnxmllibPerf.log" )
  58. #endif
  59. /****************************************************************************
  60.  * 
  61.  *  Function:
  62.  * 
  63.  * HXCreateInstance()
  64.  * 
  65.  *  Purpose:
  66.  * 
  67.  * Function implemented by all plugin DLL's to create an instance of 
  68.  * any of the objects supported by the DLL. This method is similar to 
  69.  * Window's CoCreateInstance() in its purpose, except that it only 
  70.  * creates objects from this plugin DLL.
  71.  *
  72.  * NOTE: Aggregation is never used. Therefore and outer unknown is
  73.  * not passed to this function, and you do not need to code for this
  74.  * situation.
  75.  * 
  76.  */
  77. STDAPI ENTRYPOINT(HXCREATEINSTANCE)(IUnknown**  /*OUT*/ ppIUnknown)   
  78. {   
  79.     *ppIUnknown = (IUnknown*)(IHXPlugin*)new HXXMLCCFPlugin();
  80.     if (*ppIUnknown)
  81.     {
  82. (*ppIUnknown)->AddRef();    
  83. return HXR_OK;
  84.     }
  85.     return HXR_OUTOFMEMORY;
  86. }   
  87. /****************************************************************************
  88.  * 
  89.  *  Function:
  90.  * 
  91.  * CanUnload2()
  92.  * 
  93.  *  Purpose:
  94.  * 
  95.  * Function implemented by all plugin DLL's.  If it returns HXR_OK, 
  96.  * then the pluginhandler can unload the DLL.
  97.  *
  98.  */
  99. STDAPI ENTRYPOINT(CanUnload2)(void)
  100. {
  101.     return (CHXBaseCountingObject::ObjectsActive() > 0 ? HXR_FAIL : HXR_OK );
  102. }
  103. /****************************************************************************
  104.  * 
  105.  *  Function:
  106.  * 
  107.  * CanUnload()
  108.  * 
  109.  *  Purpose:
  110.  * 
  111.  * Function implemented by all plugin DLL's if it returns HXR_OK 
  112.  * then the pluginhandler can unload the DLL
  113.  *
  114.  */
  115. STDAPI ENTRYPOINT(CanUnload)(void)
  116. {
  117.     return ENTRYPOINT(CanUnload2)();
  118. }
  119. HXXMLCCFPlugin::HXXMLCCFPlugin()
  120. : m_lRefCount(0)
  121. , m_pContext(NULL)
  122. , m_pClassFactory(NULL)
  123. {
  124. }
  125. HXXMLCCFPlugin::~HXXMLCCFPlugin()
  126. {
  127.     HX_RELEASE(m_pContext);
  128.     HX_RELEASE(m_pClassFactory);
  129. }
  130. /************************************************************************
  131.  *  IUnknown COM Interface Methods                          ref:  hxcom.h
  132.  */
  133. STDMETHODIMP
  134. HXXMLCCFPlugin::QueryInterface(REFIID riid, void** ppvObj)
  135. {
  136.     if (IsEqualIID(riid, IID_IUnknown))
  137.     {
  138. AddRef();
  139. *ppvObj = (IHXPlugin*)this;
  140. return HXR_OK;
  141.     }
  142.     else if (IsEqualIID(riid, IID_IHXPlugin))
  143.     {
  144. AddRef();
  145. *ppvObj = (IHXPlugin*)this;
  146. return HXR_OK;
  147.     }
  148.     else if (IsEqualIID(riid, IID_IHXCommonClassFactory))
  149.     {
  150. AddRef();
  151. *ppvObj = (IHXCommonClassFactory*)this;
  152. return HXR_OK;
  153.     }
  154.     *ppvObj = 0;
  155.     return HXR_NOINTERFACE;
  156. }
  157. STDMETHODIMP_(UINT32)
  158. HXXMLCCFPlugin::AddRef()
  159. {
  160.     return InterlockedIncrement(&m_lRefCount);
  161. }
  162. STDMETHODIMP_(UINT32)
  163. HXXMLCCFPlugin::Release()
  164. {
  165.     if (InterlockedDecrement(&m_lRefCount) > 0)
  166.     {
  167. return m_lRefCount;
  168.     }
  169.     delete this;
  170.     return 0;
  171. }
  172. /************************************************************************
  173.  *  IHXPlugin Interface Methods                         ref:  hxplugn.h
  174.  */
  175. STDMETHODIMP
  176. HXXMLCCFPlugin::GetPluginInfo(
  177.   REF(BOOL)        bLoadMultiple,
  178.   REF(const char*) pDescription,
  179.   REF(const char*) pCopyright,
  180.   REF(const char*) pMoreInfoURL,
  181.   REF(UINT32)      versionNumber
  182. )
  183. {
  184.     bLoadMultiple = TRUE;
  185.     pDescription = "RealNetworks XML Parser Plugin";
  186.     pCopyright = HXVER_COPYRIGHT;
  187.     pMoreInfoURL = HXVER_MOREINFO;
  188.     versionNumber = TARVER_ULONG32_VERSION;
  189.     return HXR_OK;
  190. }
  191. STDMETHODIMP
  192. HXXMLCCFPlugin::InitPlugin(IUnknown* pHXCore)
  193. {
  194.     HX_RELEASE(m_pContext);
  195.     m_pContext = pHXCore;
  196.     m_pContext->AddRef();
  197.     return HXR_OK;
  198. }
  199. /* IHXCommonClassFactory */
  200. STDMETHODIMP
  201. HXXMLCCFPlugin::CreateInstance( REFCLSID /*IN*/ rclsid,
  202.       void**   /*OUT*/ ppUnknown)
  203. {
  204.     if (IsEqualCLSID(rclsid, CLSID_IHXXMLParser))
  205.     {
  206. *ppUnknown = (IUnknown*)(IHXXMLParser*)(new HXExpatXMLParser(m_pContext));
  207. ((IUnknown*)*ppUnknown)->AddRef();
  208. return HXR_OK;
  209.     }
  210.     *ppUnknown = NULL;
  211.     return HXR_NOINTERFACE;
  212. }
  213.     
  214. STDMETHODIMP
  215. HXXMLCCFPlugin::CreateInstanceAggregatable(
  216.     REFCLSID     /*IN*/  rclsid,
  217.     REF(IUnknown*)  /*OUT*/ ppUnknown,
  218.     IUnknown*     /*IN*/  pUnkOuter)
  219. {
  220.      return HXR_NOINTERFACE;
  221. }