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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: xmlccf.cpp,v 1.5.20.1 2004/07/19 21:04:07 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. //  $Id: xmlccf.cpp,v 1.5.20.1 2004/07/19 21:04:07 hubbe Exp $
  50. /****************************************************************************
  51.  *  hxxml plugin
  52.  */
  53. #define INITGUID 1
  54. #include "hxcom.h"
  55. #include "hxtypes.h"
  56. #include "ihxpckts.h"
  57. #include "hxplugn.h"
  58. #include "hxcomm.h"
  59. #include "hxxml.h"
  60. #include "hxver.h"
  61. #include "hxerror.h"
  62. #include "hxassert.h"
  63. #include "hxperf.h"
  64. #undef INITGUID
  65. #ifdef _DEBUG
  66. #undef HX_THIS_FILE
  67. static const char HX_THIS_FILE[] = __FILE__;
  68. #endif
  69. #include "xmlparse.h"
  70. #include "expatprs.h"
  71. #include "xmlccf.h"
  72. #include "hxxml.ver"
  73. #if !defined(_SYMBIAN)
  74. HX_ENABLE_CHECKPOINTS_FOR_MODULE( "Rnxmllib", "RnxmllibPerf.log" )
  75. #endif
  76. /****************************************************************************
  77.  * 
  78.  *  Function:
  79.  * 
  80.  * HXCreateInstance()
  81.  * 
  82.  *  Purpose:
  83.  * 
  84.  * Function implemented by all plugin DLL's to create an instance of 
  85.  * any of the objects supported by the DLL. This method is similar to 
  86.  * Window's CoCreateInstance() in its purpose, except that it only 
  87.  * creates objects from this plugin DLL.
  88.  *
  89.  * NOTE: Aggregation is never used. Therefore and outer unknown is
  90.  * not passed to this function, and you do not need to code for this
  91.  * situation.
  92.  * 
  93.  */
  94. STDAPI ENTRYPOINT(HXCREATEINSTANCE)(IUnknown**  /*OUT*/ ppIUnknown)   
  95. {   
  96.     *ppIUnknown = (IUnknown*)(IHXPlugin*)new HXXMLCCFPlugin();
  97.     if (*ppIUnknown)
  98.     {
  99. (*ppIUnknown)->AddRef();    
  100. return HXR_OK;
  101.     }
  102.     return HXR_OUTOFMEMORY;
  103. }   
  104. /****************************************************************************
  105.  * 
  106.  *  Function:
  107.  * 
  108.  * CanUnload2()
  109.  * 
  110.  *  Purpose:
  111.  * 
  112.  * Function implemented by all plugin DLL's.  If it returns HXR_OK, 
  113.  * then the pluginhandler can unload the DLL.
  114.  *
  115.  */
  116. STDAPI ENTRYPOINT(CanUnload2)(void)
  117. {
  118.     return (CHXBaseCountingObject::ObjectsActive() > 0 ? HXR_FAIL : HXR_OK );
  119. }
  120. /****************************************************************************
  121.  * 
  122.  *  Function:
  123.  * 
  124.  * CanUnload()
  125.  * 
  126.  *  Purpose:
  127.  * 
  128.  * Function implemented by all plugin DLL's if it returns HXR_OK 
  129.  * then the pluginhandler can unload the DLL
  130.  *
  131.  */
  132. STDAPI ENTRYPOINT(CanUnload)(void)
  133. {
  134.     return ENTRYPOINT(CanUnload2)();
  135. }
  136. HXXMLCCFPlugin::HXXMLCCFPlugin()
  137. : m_lRefCount(0)
  138. , m_pContext(NULL)
  139. , m_pClassFactory(NULL)
  140. {
  141. }
  142. HXXMLCCFPlugin::~HXXMLCCFPlugin()
  143. {
  144.     HX_RELEASE(m_pContext);
  145.     HX_RELEASE(m_pClassFactory);
  146. }
  147. /************************************************************************
  148.  *  IUnknown COM Interface Methods                          ref:  hxcom.h
  149.  */
  150. STDMETHODIMP
  151. HXXMLCCFPlugin::QueryInterface(REFIID riid, void** ppvObj)
  152. {
  153.     if (IsEqualIID(riid, IID_IUnknown))
  154.     {
  155. AddRef();
  156. *ppvObj = (IHXPlugin*)this;
  157. return HXR_OK;
  158.     }
  159.     else if (IsEqualIID(riid, IID_IHXPlugin))
  160.     {
  161. AddRef();
  162. *ppvObj = (IHXPlugin*)this;
  163. return HXR_OK;
  164.     }
  165.     else if (IsEqualIID(riid, IID_IHXCommonClassFactory))
  166.     {
  167. AddRef();
  168. *ppvObj = (IHXCommonClassFactory*)this;
  169. return HXR_OK;
  170.     }
  171.     *ppvObj = 0;
  172.     return HXR_NOINTERFACE;
  173. }
  174. STDMETHODIMP_(UINT32)
  175. HXXMLCCFPlugin::AddRef()
  176. {
  177.     return InterlockedIncrement(&m_lRefCount);
  178. }
  179. STDMETHODIMP_(UINT32)
  180. HXXMLCCFPlugin::Release()
  181. {
  182.     if (InterlockedDecrement(&m_lRefCount) > 0)
  183.     {
  184. return m_lRefCount;
  185.     }
  186.     delete this;
  187.     return 0;
  188. }
  189. /************************************************************************
  190.  *  IHXPlugin Interface Methods                         ref:  hxplugn.h
  191.  */
  192. STDMETHODIMP
  193. HXXMLCCFPlugin::GetPluginInfo(
  194.   REF(BOOL)        bLoadMultiple,
  195.   REF(const char*) pDescription,
  196.   REF(const char*) pCopyright,
  197.   REF(const char*) pMoreInfoURL,
  198.   REF(UINT32)      versionNumber
  199. )
  200. {
  201.     bLoadMultiple = TRUE;
  202.     pDescription = "RealNetworks XML Parser Plugin";
  203.     pCopyright = HXVER_COPYRIGHT;
  204.     pMoreInfoURL = HXVER_MOREINFO;
  205.     versionNumber = TARVER_ULONG32_VERSION;
  206.     return HXR_OK;
  207. }
  208. STDMETHODIMP
  209. HXXMLCCFPlugin::InitPlugin(IUnknown* pHXCore)
  210. {
  211.     HX_RELEASE(m_pContext);
  212.     m_pContext = pHXCore;
  213.     m_pContext->AddRef();
  214.     return HXR_OK;
  215. }
  216. /* IHXCommonClassFactory */
  217. STDMETHODIMP
  218. HXXMLCCFPlugin::CreateInstance( REFCLSID /*IN*/ rclsid,
  219.       void**   /*OUT*/ ppUnknown)
  220. {
  221.     if (IsEqualCLSID(rclsid, CLSID_IHXXMLParser))
  222.     {
  223. *ppUnknown = (IUnknown*)(IHXXMLParser*)(new HXExpatXMLParser(m_pContext));
  224. ((IUnknown*)*ppUnknown)->AddRef();
  225. return HXR_OK;
  226.     }
  227.     *ppUnknown = NULL;
  228.     return HXR_NOINTERFACE;
  229. }
  230.     
  231. STDMETHODIMP
  232. HXXMLCCFPlugin::CreateInstanceAggregatable(
  233.     REFCLSID     /*IN*/  rclsid,
  234.     REF(IUnknown*)  /*OUT*/ ppUnknown,
  235.     IUnknown*     /*IN*/  pUnkOuter)
  236. {
  237.      return HXR_NOINTERFACE;
  238. }