2000-09-28 02:47:31 -05:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2005-09-08 23:22:24 -05:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-28 02:47:31 -05:00
|
|
|
*
|
2005-09-08 23:22:24 -05:00
|
|
|
* $RCSfile: remote_bridge.cxx,v $
|
2000-09-28 02:47:31 -05:00
|
|
|
*
|
2006-06-19 07:16:58 -05:00
|
|
|
* $Revision: 1.10 $
|
2000-09-28 02:47:31 -05:00
|
|
|
*
|
2006-06-19 07:16:58 -05:00
|
|
|
* last change: $Author: hr $ $Date: 2006-06-19 13:16:58 $
|
2000-09-28 02:47:31 -05:00
|
|
|
*
|
2005-09-08 23:22:24 -05:00
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2000-09-28 02:47:31 -05:00
|
|
|
*
|
|
|
|
*
|
2005-09-08 23:22:24 -05:00
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2000-09-28 02:47:31 -05:00
|
|
|
*
|
2005-09-08 23:22:24 -05:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2000-09-28 02:47:31 -05:00
|
|
|
*
|
2005-09-08 23:22:24 -05:00
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
2000-09-28 02:47:31 -05:00
|
|
|
*
|
2005-09-08 23:22:24 -05:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
2000-09-28 02:47:31 -05:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#include "remote_bridge.hxx"
|
|
|
|
#include "bridge_connection.hxx"
|
2001-06-22 10:39:16 -05:00
|
|
|
#include <cppuhelper/implementationentry.hxx>
|
2000-09-28 02:47:31 -05:00
|
|
|
|
|
|
|
#include <com/sun/star/lang/IllegalArgumentException.hpp>
|
|
|
|
#include <com/sun/star/bridge/BridgeExistsException.hpp>
|
|
|
|
|
|
|
|
#define IMPLEMENTATION_NAME "com.sun.star.comp.remotebridges.Bridge.various"
|
|
|
|
|
|
|
|
|
|
|
|
using namespace ::rtl;
|
|
|
|
using namespace ::cppu;
|
|
|
|
using namespace ::osl;
|
|
|
|
using namespace ::com::sun::star::uno;
|
|
|
|
using namespace ::com::sun::star::lang;
|
|
|
|
using namespace ::com::sun::star::bridge;
|
|
|
|
using namespace ::com::sun::star::registry;
|
|
|
|
using namespace ::com::sun::star::connection;
|
|
|
|
|
|
|
|
namespace remotebridges_bridge
|
|
|
|
{
|
2001-06-22 10:39:16 -05:00
|
|
|
rtl_StandardModuleCount g_moduleCount = MODULE_COUNT_INIT;
|
|
|
|
|
2000-09-28 02:47:31 -05:00
|
|
|
ORemoteBridge::ORemoteBridge() :
|
|
|
|
OComponentHelper( m_mutex ),
|
|
|
|
m_pContext( 0 ),
|
|
|
|
m_pEnvRemote(0 )
|
|
|
|
{
|
2001-06-22 10:39:16 -05:00
|
|
|
g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
|
2000-09-28 02:47:31 -05:00
|
|
|
remote_DisposingListener::acquire = thisAcquire;
|
|
|
|
remote_DisposingListener::release = thisRelease;
|
|
|
|
remote_DisposingListener::disposing = thisDisposing;
|
|
|
|
}
|
|
|
|
|
|
|
|
ORemoteBridge::~ORemoteBridge()
|
|
|
|
{
|
|
|
|
if( m_pContext )
|
|
|
|
{
|
|
|
|
m_pContext->aBase.release( (uno_Context *) m_pContext );
|
|
|
|
}
|
|
|
|
if( m_pEnvRemote )
|
|
|
|
{
|
|
|
|
m_pEnvRemote->release( m_pEnvRemote );
|
|
|
|
}
|
2001-06-22 10:39:16 -05:00
|
|
|
g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
|
2000-09-28 02:47:31 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
void ORemoteBridge::objectMappedSuccesfully()
|
|
|
|
{
|
|
|
|
MutexGuard guard( m_mutex );
|
|
|
|
|
|
|
|
if( m_pEnvRemote )
|
|
|
|
{
|
|
|
|
m_pEnvRemote->release( m_pEnvRemote );
|
|
|
|
m_pEnvRemote = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-09-11 07:51:37 -05:00
|
|
|
Any ORemoteBridge::queryInterface( const Type & aType ) throw(RuntimeException)
|
2000-09-28 02:47:31 -05:00
|
|
|
{
|
|
|
|
Any a = ::cppu::queryInterface(
|
|
|
|
aType ,
|
|
|
|
SAL_STATIC_CAST( XInitialization * , this ) ,
|
|
|
|
SAL_STATIC_CAST( XBridge * , this ),
|
|
|
|
SAL_STATIC_CAST( XTypeProvider * , this ) );
|
|
|
|
if( a.hasValue() )
|
|
|
|
{
|
|
|
|
return a;
|
|
|
|
}
|
|
|
|
|
|
|
|
return OComponentHelper::queryInterface( aType );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ORemoteBridge::initialize( const Sequence< Any >& aArguments )
|
|
|
|
throw( Exception, RuntimeException)
|
|
|
|
{
|
|
|
|
|
|
|
|
MutexGuard guard( m_mutex );
|
|
|
|
|
|
|
|
if( 4 != aArguments.getLength() )
|
|
|
|
{
|
|
|
|
throw IllegalArgumentException( rtl::OUString::createFromAscii("wrong number of arguments") ,
|
|
|
|
Reference< XInterface >(),
|
|
|
|
0 );
|
|
|
|
}
|
|
|
|
|
|
|
|
OUString swName;
|
|
|
|
OUString swProtocol;
|
|
|
|
Reference < XConnection > rConnection;
|
|
|
|
Reference < XInstanceProvider > rProvider;
|
|
|
|
|
|
|
|
aArguments.getConstArray()[0] >>= swName;
|
|
|
|
aArguments.getConstArray()[1] >>= swProtocol;
|
|
|
|
aArguments.getConstArray()[2] >>= rConnection;
|
|
|
|
aArguments.getConstArray()[3] >>= rProvider;
|
|
|
|
|
|
|
|
if( ! rConnection.is() )
|
|
|
|
{
|
|
|
|
throw IllegalArgumentException( rtl::OUString::createFromAscii("connection is missing") ,
|
|
|
|
Reference < XInterface > (),
|
|
|
|
2 );
|
|
|
|
}
|
|
|
|
|
|
|
|
remote_Connection *pConnection = new OConnectionWrapper( rConnection );
|
|
|
|
remote_InstanceProvider *pProvider = 0;
|
|
|
|
if( rProvider.is( ))
|
|
|
|
{
|
|
|
|
pProvider = new OInstanceProviderWrapper( rProvider , this );
|
|
|
|
}
|
|
|
|
|
|
|
|
OUString sName = swName;
|
|
|
|
m_sDescription = swProtocol;
|
|
|
|
m_sDescription += OUString( RTL_CONSTASCII_USTRINGPARAM(":"));
|
|
|
|
m_sDescription += rConnection->getDescription();
|
|
|
|
|
|
|
|
if( 0 == sName.getLength() )
|
|
|
|
{
|
|
|
|
sName = m_sDescription;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
m_sName = sName;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_pContext = remote_createContext( pConnection,
|
|
|
|
sName.pData,
|
|
|
|
m_sDescription.pData,
|
|
|
|
swProtocol.pData,
|
|
|
|
pProvider );
|
|
|
|
if( ! m_pContext )
|
|
|
|
{
|
|
|
|
throw BridgeExistsException();
|
|
|
|
}
|
|
|
|
|
|
|
|
m_pContext->addDisposingListener( m_pContext ,
|
|
|
|
(remote_DisposingListener *) this );
|
|
|
|
|
|
|
|
// environment will be released by the first succesfull mapping
|
|
|
|
OUString sRemoteEnv;
|
|
|
|
if( swProtocol.indexOf( ',') == -1 )
|
|
|
|
{
|
|
|
|
sRemoteEnv = swProtocol;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sRemoteEnv = swProtocol.copy( 0 , swProtocol.indexOf( ',' ) );
|
|
|
|
}
|
|
|
|
m_sProtocol = sRemoteEnv;
|
|
|
|
uno_getEnvironment( &m_pEnvRemote ,
|
|
|
|
sRemoteEnv.pData ,
|
|
|
|
m_pContext );
|
|
|
|
if( ! m_pEnvRemote )
|
|
|
|
{
|
|
|
|
m_pContext->removeDisposingListener( m_pContext ,
|
|
|
|
(remote_DisposingListener*) this );
|
|
|
|
m_pContext->aBase.release( (uno_Context * ) m_pContext );
|
|
|
|
m_pContext = 0;
|
|
|
|
|
|
|
|
// forgotten exception when specifying the interface
|
|
|
|
throw RuntimeException( rtl::OUString::createFromAscii("couldn't create uno-remote-environment") ,
|
|
|
|
Reference < XInterface > () );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Reference< XInterface > ORemoteBridge::getInstance( const ::rtl::OUString& sInstanceName )
|
|
|
|
throw(::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
Reference < XInterface > rReturn;
|
|
|
|
|
2001-05-02 08:14:14 -05:00
|
|
|
remote_Context *pContext = 0;
|
|
|
|
{
|
|
|
|
MutexGuard guard( m_mutex );
|
|
|
|
if( m_pContext && m_pContext->getRemoteInstance )
|
|
|
|
{
|
|
|
|
pContext = m_pContext;
|
|
|
|
pContext->aBase.acquire( (uno_Context*)pContext );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if( pContext )
|
2000-09-28 02:47:31 -05:00
|
|
|
{
|
|
|
|
// get the appropriate remote environment
|
|
|
|
uno_Environment *pEnvRemote = 0;
|
2001-05-02 08:14:14 -05:00
|
|
|
uno_getEnvironment( &pEnvRemote , m_sProtocol.pData , pContext );
|
2000-09-28 02:47:31 -05:00
|
|
|
|
|
|
|
if( ! pEnvRemote )
|
|
|
|
{
|
2001-05-02 08:14:14 -05:00
|
|
|
pContext->aBase.release( (uno_Context*) pContext );
|
|
|
|
throw RuntimeException(
|
|
|
|
OUString( RTL_CONSTASCII_USTRINGPARAM( "RemoteBridge: bridge already disposed" ) ),
|
|
|
|
Reference< XInterface > () );
|
2000-09-28 02:47:31 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
Type type = getCppuType( (Reference < XInterface > * ) 0 );
|
|
|
|
|
|
|
|
remote_Interface *pRemoteI = 0;
|
2001-05-02 08:14:14 -05:00
|
|
|
uno_Any exception;
|
|
|
|
uno_Any *pException = &exception;
|
|
|
|
|
|
|
|
pContext->getRemoteInstance(
|
2000-09-28 02:47:31 -05:00
|
|
|
pEnvRemote,
|
|
|
|
&pRemoteI,
|
|
|
|
sInstanceName.pData,
|
2001-05-02 08:14:14 -05:00
|
|
|
type.getTypeLibType(),
|
|
|
|
&pException );
|
|
|
|
pContext->aBase.release( (uno_Context*) pContext );
|
|
|
|
pContext = 0;
|
|
|
|
|
|
|
|
uno_Environment *pEnvCpp =0;
|
|
|
|
OUString sCppuName( RTL_CONSTASCII_USTRINGPARAM( CPPU_CURRENT_LANGUAGE_BINDING_NAME ) );
|
|
|
|
uno_getEnvironment( &pEnvCpp ,
|
|
|
|
sCppuName.pData ,
|
|
|
|
0 );
|
|
|
|
Mapping map( pEnvRemote , pEnvCpp );
|
|
|
|
|
|
|
|
pEnvCpp->release( pEnvCpp );
|
|
|
|
pEnvRemote->release( pEnvRemote );
|
2000-09-28 02:47:31 -05:00
|
|
|
|
2001-05-02 08:14:14 -05:00
|
|
|
if( pException )
|
|
|
|
{
|
|
|
|
typelib_CompoundTypeDescription * pCompType = 0 ;
|
|
|
|
getCppuType( (Exception*)0 ).getDescription( (typelib_TypeDescription **) &pCompType );
|
|
|
|
|
|
|
|
if( ! ((typelib_TypeDescription *)pCompType)->bComplete )
|
|
|
|
{
|
|
|
|
typelib_typedescription_complete( (typelib_TypeDescription**) &pCompType );
|
|
|
|
}
|
|
|
|
XInterface *pXInterface = (XInterface *) map.mapInterface(
|
|
|
|
*(remote_Interface**) ( ((char*)pException->pData)+pCompType->pMemberOffsets[1] ),
|
|
|
|
getCppuType( (Reference< XInterface > *)0 ) );
|
|
|
|
RuntimeException myException(
|
|
|
|
*((rtl_uString **)pException->pData),
|
|
|
|
Reference< XInterface > ( pXInterface , SAL_NO_ACQUIRE) );
|
|
|
|
uno_any_destruct( pException , 0 );
|
|
|
|
|
|
|
|
throw myException;
|
|
|
|
}
|
|
|
|
else if( pRemoteI )
|
2000-09-28 02:47:31 -05:00
|
|
|
{
|
|
|
|
// got an interface !
|
|
|
|
XInterface * pCppI = ( XInterface * ) map.mapInterface( pRemoteI, type );
|
2001-05-02 08:14:14 -05:00
|
|
|
rReturn = Reference<XInterface > ( pCppI, SAL_NO_ACQUIRE );
|
2000-09-28 02:47:31 -05:00
|
|
|
pRemoteI->release( pRemoteI );
|
|
|
|
objectMappedSuccesfully();
|
|
|
|
}
|
|
|
|
}
|
2001-05-02 08:14:14 -05:00
|
|
|
else
|
|
|
|
{
|
|
|
|
throw RuntimeException(
|
|
|
|
OUString( RTL_CONSTASCII_USTRINGPARAM( "RemoteBridge: bridge already disposed." ) ),
|
|
|
|
Reference< XInterface > () );
|
|
|
|
}
|
|
|
|
|
2000-09-28 02:47:31 -05:00
|
|
|
return rReturn;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
::rtl::OUString SAL_CALL ORemoteBridge::getName( )
|
|
|
|
throw(::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return m_sName;
|
|
|
|
}
|
|
|
|
|
|
|
|
::rtl::OUString SAL_CALL ORemoteBridge::getDescription( )
|
|
|
|
throw(::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return m_sDescription;
|
|
|
|
}
|
|
|
|
|
|
|
|
// XTypeProvider
|
|
|
|
Sequence< Type > SAL_CALL ORemoteBridge::getTypes(void) throw( RuntimeException )
|
|
|
|
{
|
|
|
|
static OTypeCollection *pCollection = 0;
|
|
|
|
if( ! pCollection )
|
|
|
|
{
|
|
|
|
MutexGuard guard( Mutex::getGlobalMutex() );
|
|
|
|
if( ! pCollection )
|
|
|
|
{
|
|
|
|
static OTypeCollection collection(
|
|
|
|
getCppuType( (Reference< XTypeProvider> * )0),
|
|
|
|
getCppuType( (Reference< XBridge > * ) 0 ),
|
|
|
|
getCppuType( (Reference< XInitialization > * ) 0 ),
|
|
|
|
OComponentHelper::getTypes() );
|
|
|
|
pCollection = &collection;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return (*pCollection).getTypes();
|
|
|
|
}
|
|
|
|
|
|
|
|
Sequence< sal_Int8 > SAL_CALL ORemoteBridge::getImplementationId( ) throw( RuntimeException)
|
|
|
|
{
|
|
|
|
static OImplementationId *pId = 0;
|
|
|
|
if( ! pId )
|
|
|
|
{
|
|
|
|
MutexGuard guard( Mutex::getGlobalMutex() );
|
|
|
|
if( ! pId )
|
|
|
|
{
|
|
|
|
static OImplementationId id( sal_False );
|
|
|
|
pId = &id;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return (*pId).getImplementationId();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ORemoteBridge::disposing()
|
|
|
|
{
|
|
|
|
MutexGuard guard( m_mutex );
|
|
|
|
if( m_pContext )
|
|
|
|
{
|
|
|
|
m_pContext->removeDisposingListener( m_pContext , ( remote_DisposingListener * )this);
|
|
|
|
if( ! m_pEnvRemote )
|
|
|
|
{
|
|
|
|
if( m_pContext->m_pConnection )
|
|
|
|
{
|
2001-05-11 04:57:01 -05:00
|
|
|
sal_Int32 nIndex = 0;
|
|
|
|
OUString sProtocol = OUString( m_pContext->m_pProtocol ).getToken( 0 , ',' , nIndex );
|
2000-09-28 02:47:31 -05:00
|
|
|
uno_getEnvironment( &m_pEnvRemote , sProtocol.pData , m_pContext );
|
|
|
|
OSL_ASSERT( m_pEnvRemote );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// within disposing from the context, no further dispose necessary !
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if( m_pEnvRemote )
|
|
|
|
{
|
|
|
|
m_pEnvRemote->dispose( m_pEnvRemote );
|
|
|
|
m_pEnvRemote->release( m_pEnvRemote );
|
|
|
|
m_pEnvRemote = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_pContext->aBase.release( (uno_Context*)m_pContext );
|
|
|
|
m_pContext = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//----------------------
|
|
|
|
// static methods
|
|
|
|
//----------------------
|
|
|
|
void ORemoteBridge::thisAcquire( remote_DisposingListener *p )
|
|
|
|
{
|
|
|
|
ORemoteBridge *m = (ORemoteBridge * ) p;
|
|
|
|
m->acquire();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ORemoteBridge::thisRelease( remote_DisposingListener *p )
|
|
|
|
{
|
|
|
|
ORemoteBridge *m = (ORemoteBridge * ) p;
|
|
|
|
m->release();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ORemoteBridge::thisDisposing( remote_DisposingListener * p,
|
2006-06-19 07:16:58 -05:00
|
|
|
rtl_uString * )
|
2000-09-28 02:47:31 -05:00
|
|
|
{
|
|
|
|
ORemoteBridge *m = (ORemoteBridge * ) p;
|
|
|
|
m->dispose();
|
|
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------
|
|
|
|
//
|
|
|
|
//---------------------------------
|
2001-06-22 10:39:16 -05:00
|
|
|
Reference< XInterface > SAL_CALL CreateInstance( const Reference< XComponentContext > &)
|
2000-09-28 02:47:31 -05:00
|
|
|
{
|
|
|
|
return Reference< XInterface > ( ( OWeakObject * ) new ORemoteBridge );
|
|
|
|
}
|
|
|
|
|
2001-06-22 10:39:16 -05:00
|
|
|
OUString getImplementationName()
|
|
|
|
{
|
|
|
|
static OUString *pImplName = 0;
|
|
|
|
if( ! pImplName )
|
|
|
|
{
|
|
|
|
MutexGuard guard( Mutex::getGlobalMutex() );
|
|
|
|
if( ! pImplName )
|
|
|
|
{
|
|
|
|
static OUString implName(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM( IMPLEMENTATION_NAME ) );
|
|
|
|
pImplName = &implName;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return *pImplName;
|
|
|
|
}
|
|
|
|
|
2000-09-28 02:47:31 -05:00
|
|
|
Sequence< OUString > getSupportedServiceNames()
|
|
|
|
{
|
|
|
|
static Sequence < OUString > *pNames = 0;
|
|
|
|
if( ! pNames )
|
|
|
|
{
|
|
|
|
MutexGuard guard( Mutex::getGlobalMutex() );
|
|
|
|
if( !pNames )
|
|
|
|
{
|
2000-10-27 03:00:57 -05:00
|
|
|
static Sequence< OUString > seqNames(3);
|
|
|
|
seqNames.getArray()[0] = OUString::createFromAscii( "com.sun.star.bridge.Bridge" );
|
2000-10-30 02:08:46 -06:00
|
|
|
seqNames.getArray()[1] = OUString::createFromAscii( "com.sun.star.bridge.IiopBridge" );
|
|
|
|
seqNames.getArray()[2] = OUString::createFromAscii( "com.sun.star.bridge.UrpBridge" );
|
2000-09-28 02:47:31 -05:00
|
|
|
|
|
|
|
pNames = &seqNames;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return *pNames;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
using namespace remotebridges_bridge;
|
|
|
|
|
2001-06-22 10:39:16 -05:00
|
|
|
static struct ImplementationEntry g_entries[] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
remotebridges_bridge::CreateInstance, remotebridges_bridge::getImplementationName,
|
|
|
|
remotebridges_bridge::getSupportedServiceNames, createSingleComponentFactory,
|
|
|
|
&g_moduleCount.modCnt , 0
|
|
|
|
},
|
|
|
|
{ 0, 0, 0, 0, 0, 0 }
|
|
|
|
};
|
|
|
|
|
2000-09-28 02:47:31 -05:00
|
|
|
extern "C"
|
|
|
|
{
|
2001-06-22 10:39:16 -05:00
|
|
|
sal_Bool SAL_CALL component_canUnload( TimeValue *pTime )
|
|
|
|
{
|
|
|
|
return g_moduleCount.canUnload( &g_moduleCount , pTime );
|
|
|
|
}
|
|
|
|
|
2000-09-28 02:47:31 -05:00
|
|
|
//==================================================================================================
|
|
|
|
void SAL_CALL component_getImplementationEnvironment(
|
2006-06-19 07:16:58 -05:00
|
|
|
const sal_Char ** ppEnvTypeName, uno_Environment ** )
|
2000-09-28 02:47:31 -05:00
|
|
|
{
|
|
|
|
*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
|
|
|
|
}
|
|
|
|
//==================================================================================================
|
|
|
|
sal_Bool SAL_CALL component_writeInfo(
|
|
|
|
void * pServiceManager, void * pRegistryKey )
|
|
|
|
{
|
2001-06-22 10:39:16 -05:00
|
|
|
return component_writeInfoHelper( pServiceManager, pRegistryKey, g_entries );
|
2000-09-28 02:47:31 -05:00
|
|
|
}
|
|
|
|
//==================================================================================================
|
|
|
|
void * SAL_CALL component_getFactory(
|
|
|
|
const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
|
|
|
|
{
|
2001-06-22 10:39:16 -05:00
|
|
|
return component_getFactoryHelper( pImplName, pServiceManager, pRegistryKey , g_entries );
|
2000-09-28 02:47:31 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-22 10:39:16 -05:00
|
|
|
|