diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2003-06-10 09:13:31 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2003-06-10 09:13:31 +0000 |
commit | e102971f15323400b83a88e6b4704484e446330c (patch) | |
tree | 2005beb8c6d85b29a9430b00d8d91c451a899174 /odk/examples/DevelopersGuide/Components/CppComponent | |
parent | 7e0212b72db4e66d7f41193e7c7f8eaabd7917f9 (diff) |
INTEGRATION: CWS sdk02 (1.1.2); FILE ADDED
2003/05/09 10:42:09 jsc 1.1.2.1: #109045# insert new and remove example zip file
Diffstat (limited to 'odk/examples/DevelopersGuide/Components/CppComponent')
-rw-r--r-- | odk/examples/DevelopersGuide/Components/CppComponent/service2_impl.cxx | 173 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/Components/CppComponent/some.idl | 22 |
2 files changed, 195 insertions, 0 deletions
diff --git a/odk/examples/DevelopersGuide/Components/CppComponent/service2_impl.cxx b/odk/examples/DevelopersGuide/Components/CppComponent/service2_impl.cxx new file mode 100644 index 00000000..3e55be05 --- /dev/null +++ b/odk/examples/DevelopersGuide/Components/CppComponent/service2_impl.cxx @@ -0,0 +1,173 @@ +#include <cppuhelper/implbase3.hxx> // "3" implementing three interfaces +#include <cppuhelper/factory.hxx> +#include <cppuhelper/implementationentry.hxx> + +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/lang/IllegalArgumentException.hpp> +#include <my_module/XSomething.hpp> + + +using namespace ::rtl; // for OUString +using namespace ::com::sun::star; // for odk interfaces +using namespace ::com::sun::star::uno; // for basic types + + +namespace my_sc_impl +{ + +extern Sequence< OUString > SAL_CALL getSupportedServiceNames_MyService1Impl(); +extern OUString SAL_CALL getImplementationName_MyService1Impl(); +extern Reference< XInterface > SAL_CALL create_MyService1Impl( + Reference< XComponentContext > const & xContext ) + SAL_THROW( () ); + +static Sequence< OUString > getSupportedServiceNames_MyService2Impl() +{ + static Sequence < OUString > *pNames = 0; + if( ! pNames ) + { +// MutexGuard guard( Mutex::getGlobalMutex() ); + if( !pNames ) + { + static Sequence< OUString > seqNames(1); + seqNames.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM("my_module.MyService2")); + pNames = &seqNames; + } + } + return *pNames; +} + +static OUString getImplementationName_MyService2Impl() +{ + static OUString *pImplName = 0; + if( ! pImplName ) + { +// MutexGuard guard( Mutex::getGlobalMutex() ); + if( ! pImplName ) + { + static OUString implName( RTL_CONSTASCII_USTRINGPARAM("my_module.my_sc_implementation.MyService2") ); + pImplName = &implName; + } + } + return *pImplName; +} + +class MyService2Impl : public ::cppu::WeakImplHelper3< + ::my_module::XSomething, lang::XServiceInfo, lang::XInitialization > +{ + OUString m_arg; +public: + // focus on three given interfaces, + // no need to implement XInterface, XTypeProvider, XWeak + + // XInitialization will be called upon createInstanceWithArguments[AndContext]() + virtual void SAL_CALL initialize( Sequence< Any > const & args ) + throw (Exception); + // XSomething + virtual OUString SAL_CALL methodOne( OUString const & str ) + throw (RuntimeException); + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() + throw (RuntimeException); + virtual sal_Bool SAL_CALL supportsService( OUString const & serviceName ) + throw (RuntimeException); + virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() + throw (RuntimeException); +}; +// XInitialization implemention +void MyService2Impl::initialize( Sequence< Any > const & args ) + throw (Exception) +{ + if (1 != args.getLength()) + { + throw lang::IllegalArgumentException( + OUString( RTL_CONSTASCII_USTRINGPARAM("give a string instanciating this component!") ), + (::cppu::OWeakObject *)this, // resolve to XInterface reference + 0 ); // argument pos + } + if (! (args[ 0 ] >>= m_arg)) + { + throw lang::IllegalArgumentException( + OUString( RTL_CONSTASCII_USTRINGPARAM("no string given as argument!") ), + (::cppu::OWeakObject *)this, // resolve to XInterface reference + 0 ); // argument pos + } +} +// XSomething implementation +OUString MyService2Impl::methodOne( OUString const & str ) + throw (RuntimeException) +{ + return OUString( RTL_CONSTASCII_USTRINGPARAM( + "called methodOne() of MyService2 implementation: ") ) + m_arg + str; +} +// XServiceInfo implementation +OUString MyService2Impl::getImplementationName() + throw (RuntimeException) +{ + // unique implementation name + return OUString( RTL_CONSTASCII_USTRINGPARAM("my_module.my_sc_impl.MyService2") ); +} +sal_Bool MyService2Impl::supportsService( OUString const & serviceName ) + throw (RuntimeException) +{ + // this object only supports one service, so the test is simple + return serviceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("my_module.MyService2") ); +} +Sequence< OUString > MyService2Impl::getSupportedServiceNames() + throw (RuntimeException) +{ + return getSupportedServiceNames_MyService2Impl(); +} + +Reference< XInterface > SAL_CALL create_MyService2Impl( + Reference< XComponentContext > const & xContext ) + SAL_THROW( () ) +{ + return static_cast< lang::XTypeProvider * >( new MyService2Impl() ); +} + +} + +/* shared lib exports implemented without helpers in service_impl1.cxx */ +namespace my_sc_impl +{ +static struct ::cppu::ImplementationEntry s_component_entries [] = +{ + { + create_MyService1Impl, getImplementationName_MyService1Impl, + getSupportedServiceNames_MyService1Impl, ::cppu::createSingleComponentFactory, + 0, 0 + }, + { + create_MyService2Impl, getImplementationName_MyService2Impl, + getSupportedServiceNames_MyService2Impl, ::cppu::createSingleComponentFactory, + 0, 0 + }, + { 0, 0, 0, 0, 0, 0 } +}; +} + +extern "C" +{ +void SAL_CALL component_getImplementationEnvironment( + sal_Char const ** ppEnvTypeName, uno_Environment ** ppEnv ) +{ + *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; +} +sal_Bool SAL_CALL component_writeInfo( + lang::XMultiServiceFactory * xMgr, registry::XRegistryKey * xRegistry ) +{ + return ::cppu::component_writeInfoHelper( + xMgr, xRegistry, ::my_sc_impl::s_component_entries ); +} +void * SAL_CALL component_getFactory( + sal_Char const * implName, lang::XMultiServiceFactory * xMgr, + registry::XRegistryKey * xRegistry ) +{ + return ::cppu::component_getFactoryHelper( + implName, xMgr, xRegistry, ::my_sc_impl::s_component_entries ); +} +} + + diff --git a/odk/examples/DevelopersGuide/Components/CppComponent/some.idl b/odk/examples/DevelopersGuide/Components/CppComponent/some.idl new file mode 100644 index 00000000..b7e9b766 --- /dev/null +++ b/odk/examples/DevelopersGuide/Components/CppComponent/some.idl @@ -0,0 +1,22 @@ +#include <com/sun/star/uno/XInterface.idl> +#include <com/sun/star/lang/XInitialization.idl> + +module my_module +{ + +interface XSomething : com::sun::star::uno::XInterface +{ + string methodOne( [in] string val ); +}; + +service MyService1 +{ + interface XSomething; +}; +service MyService2 +{ + interface XSomething; + interface com::sun::star::lang::XInitialization; +}; + +}; |