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) m (→Class without Helper) |
||
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); } };