Difference between revisions of "HelperNotHelper"
From Apache OpenOffice Wiki
SergeMoutou (talk | contribs) m (New page: It's important to figure out the difference beween class implementing component when you use or not an helper. = Class without Helper = Here is the C++ code <source lang="cpp"> class MyCo...) |
SergeMoutou (talk | contribs) |
||
| Line 27: | Line 27: | ||
static_cast< XServiceInfo* >( this ) ); } | static_cast< XServiceInfo* >( this ) ); } | ||
| + | // XServiceInfo implementation | ||
| + | virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException); | ||
| + | virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException); | ||
| + | virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(RuntimeException); | ||
| + | static Sequence< OUString > SAL_CALL getSupportedServiceNames_Static( ); | ||
| + | |||
| + | // XCountable implementation | ||
| + | virtual sal_Int32 SAL_CALL getCount() throw (RuntimeException) | ||
| + | { return m_nCount; } | ||
| + | virtual void SAL_CALL setCount( sal_Int32 nCount ) throw (RuntimeException) | ||
| + | { m_nCount = nCount; } | ||
| + | virtual sal_Int32 SAL_CALL increment() throw (RuntimeException) | ||
| + | { return (++m_nCount); } | ||
| + | virtual sal_Int32 SAL_CALL decrement() throw (RuntimeException) | ||
| + | { return (--m_nCount); } | ||
| + | }; | ||
| + | </source> | ||
| + | |||
| + | = Class with an Helper = | ||
| + | |||
| + | Here is the code | ||
| + | |||
| + | <source lang="cpp"> | ||
| + | class MyCounterImpl : public ::cppu::WeakImplHelper2< | ||
| + | XCountable, XServiceInfo > | ||
| + | { | ||
| + | // to obtain other services if needed | ||
| + | Reference< XMultiServiceFactory > m_xServiceManager; | ||
| + | |||
| + | sal_Int32 m_nRefCount; | ||
| + | sal_Int32 m_nCount; | ||
| + | |||
| + | public: | ||
// XServiceInfo implementation | // XServiceInfo implementation | ||
virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException); | virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException); | ||
Revision as of 11:16, 17 April 2008
It's important to figure out the difference beween class implementing component when you use or not an helper.
Class without Helper
Here is the C++ code
class MyCounterImpl
: public XCountable
, public XServiceInfo
{
sal_Int32 m_nRefCount;
sal_Int32 m_nCount;
public:
MyCounterImpl( const Reference< XMultiServiceFactory > & xServiceManager )
: m_xServiceManager( xServiceManager ), m_nRefCount( 0 )
{ printf( "< MyCounterImpl ctor called >\n" ); }
~MyCounterImpl()
{ printf( "< MyCounterImpl dtor called >\n" ); }
// XInterface implementation
virtual void SAL_CALL acquire() throw ()
{ ++m_nRefCount; }
virtual void SAL_CALL release() throw ()
{ if (! --m_nRefCount) delete this; }
virtual Any SAL_CALL queryInterface( const Type & rType ) throw (RuntimeException)
{ return cppu::queryInterface(rType, static_cast< XInterface* >
( static_cast< XServiceInfo* >( this ) ),
static_cast< XCountable* >( this ),
static_cast< XServiceInfo* >( this ) ); }
// XServiceInfo implementation
virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException);
virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException);
virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(RuntimeException);
static Sequence< OUString > SAL_CALL getSupportedServiceNames_Static( );
// XCountable implementation
virtual sal_Int32 SAL_CALL getCount() throw (RuntimeException)
{ return m_nCount; }
virtual void SAL_CALL setCount( sal_Int32 nCount ) throw (RuntimeException)
{ m_nCount = nCount; }
virtual sal_Int32 SAL_CALL increment() throw (RuntimeException)
{ return (++m_nCount); }
virtual sal_Int32 SAL_CALL decrement() throw (RuntimeException)
{ return (--m_nCount); }
};
Class with an Helper
Here is the code
class MyCounterImpl : public ::cppu::WeakImplHelper2<
XCountable, XServiceInfo >
{
// to obtain other services if needed
Reference< XMultiServiceFactory > m_xServiceManager;
sal_Int32 m_nRefCount;
sal_Int32 m_nCount;
public:
// XServiceInfo implementation
virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException);
virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException);
virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(RuntimeException);
static Sequence< OUString > SAL_CALL getSupportedServiceNames_Static( );
// XCountable implementation
virtual sal_Int32 SAL_CALL getCount() throw (RuntimeException)
{ return m_nCount; }
virtual void SAL_CALL setCount( sal_Int32 nCount ) throw (RuntimeException)
{ m_nCount = nCount; }
virtual sal_Int32 SAL_CALL increment() throw (RuntimeException)
{ return (++m_nCount); }
virtual sal_Int32 SAL_CALL decrement() throw (RuntimeException)
{ return (--m_nCount); }
};