diff options
author | Michael Stahl <mstahl@redhat.com> | 2012-01-28 20:57:40 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2012-01-28 20:57:40 +0100 |
commit | 2716f7dce26f16a2b677c178aa7d01cea096ae47 (patch) | |
tree | 9e9f67205cd5b72f1031721273e1534a3a1e5b0f /cli_ure/source/uno_bridge/cli_bridge.cxx | |
parent | 10ac9e750447fd57e3cef7993b0ad6c6538d6269 (diff) |
replace obsolete "master" branch with README that points at new repoHEADmaster-deletedmaster
Diffstat (limited to 'cli_ure/source/uno_bridge/cli_bridge.cxx')
-rw-r--r-- | cli_ure/source/uno_bridge/cli_bridge.cxx | 374 |
1 files changed, 0 insertions, 374 deletions
diff --git a/cli_ure/source/uno_bridge/cli_bridge.cxx b/cli_ure/source/uno_bridge/cli_bridge.cxx deleted file mode 100644 index 434181034..000000000 --- a/cli_ure/source/uno_bridge/cli_bridge.cxx +++ /dev/null @@ -1,374 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_cli_ure.hxx" - -#include <vcclr.h> -//ToDo: remove when build with .NET 2 -#pragma warning(push, 1) -#include <windows.h> -#include "uno/environment.hxx" -#pragma warning(pop) -#include "rtl/unload.h" -#include "uno/lbnames.h" -#include "uno/mapping.hxx" -#include "typelib/typedescription.hxx" -#include "rtl/ustring.hxx" - -#include "cli_bridge.h" -#include "cli_proxy.h" -namespace srr= System::Runtime::Remoting; -namespace srrp= System::Runtime::Remoting::Proxies; -#using <mscorlib.dll> -#if defined(_MSC_VER) && (_MSC_VER < 1400) -#include <_vcclrit.h> -#endif - -namespace cssu= com::sun::star::uno; - - -namespace sri= System::Runtime::InteropServices; -using ::rtl::OUString; -using ::rtl::OString; -using ::rtl::OUStringToOString; - -namespace cli_uno -{ - -extern "C" -{ -void SAL_CALL Mapping_acquire( uno_Mapping * mapping ) - SAL_THROW_EXTERN_C() -{ - Mapping const * that = static_cast< Mapping const * >( mapping ); - that->m_bridge->acquire(); -} -//-------------------------------------------------------------------------------------------------- -void SAL_CALL Mapping_release( uno_Mapping * mapping ) - SAL_THROW_EXTERN_C() -{ - Mapping const * that = static_cast< Mapping const * >( mapping ); - that->m_bridge->release(); -} - - -//-------------------------------------------------------------------------------------------------- -void SAL_CALL Mapping_cli2uno( - uno_Mapping * mapping, void ** ppOut, - void * pIn, typelib_InterfaceTypeDescription * td ) - SAL_THROW_EXTERN_C() -{ - uno_Interface ** ppUnoI = (uno_Interface **)ppOut; - intptr_t cliI = (intptr_t)pIn; - - OSL_ENSURE( ppUnoI && td, "### null ptr!" ); - - if (0 != *ppUnoI) - { - uno_Interface * pUnoI = *(uno_Interface **)ppUnoI; - (*pUnoI->release)( pUnoI ); - *ppUnoI = 0; - } - try - { - Mapping const * that = static_cast< Mapping const * >( mapping ); - Bridge * bridge = that->m_bridge; - - if (0 != cliI) - { - System::Object* cliObj= sri::GCHandle::op_Explicit(cliI).Target; - (*ppOut)= bridge->map_cli2uno(cliObj, (typelib_TypeDescription*) td); - } - } - catch (BridgeRuntimeError & err) - { -#if OSL_DEBUG_LEVEL >= 1 - OString cstr_msg( - OUStringToOString( - OUSTR("[cli_uno bridge error] ") + err.m_message, RTL_TEXTENCODING_ASCII_US ) ); - OSL_FAIL( cstr_msg.getStr() ); -#else - (void) err; // unused -#endif - } -} -//-------------------------------------------------------------------------------------------------- -void SAL_CALL Mapping_uno2cli( - uno_Mapping * mapping, void ** ppOut, - void * pIn, typelib_InterfaceTypeDescription * td ) - SAL_THROW_EXTERN_C() -{ - try - { - OSL_ENSURE( td && ppOut, "### null ptr!" ); - OSL_ENSURE( (sizeof(System::Char) == sizeof(sal_Unicode)) - && (sizeof(System::Boolean) == sizeof(sal_Bool)) - && (sizeof(System::SByte) == sizeof(sal_Int8)) - && (sizeof(System::Int16) == sizeof(sal_Int16)) - && (sizeof(System::UInt16) == sizeof(sal_uInt16)) - && (sizeof(System::Int32) == sizeof(sal_Int32)) - && (sizeof(System::UInt32) == sizeof(sal_uInt32)) - && (sizeof(System::Int64) == sizeof(sal_Int64)) - && (sizeof(System::UInt64) == sizeof(sal_uInt64)) - && (sizeof(System::Single) == sizeof(float)) - && (sizeof(System::Double) == sizeof(double)), - "[cli_uno bridge] incompatible .NET data types"); - intptr_t * ppDNetI = (intptr_t *)ppOut; - uno_Interface * pUnoI = (uno_Interface *)pIn; - - Mapping const * that = static_cast< Mapping const * >( mapping ); - Bridge * bridge = that->m_bridge; - - if (0 != *ppDNetI) - { - sri::GCHandle::op_Explicit(ppDNetI).Free(); - } - - if (0 != pUnoI) - { - System::Object* cliI= bridge->map_uno2cli(pUnoI, td); - intptr_t ptr= NULL; - if(cliI) - { - ptr= sri::GCHandle::op_Explicit(sri::GCHandle::Alloc(cliI)) -#ifdef _WIN32 - .ToInt32(); -#else /* defined(_WIN64) */ .ToInt64(); -#endif - } - (*ppOut)= reinterpret_cast<void*>(ptr); - } - } - catch (BridgeRuntimeError & err) - { -#if OSL_DEBUG_LEVEL >= 1 - rtl::OString cstr_msg( - rtl::OUStringToOString( - OUSTR("[cli_uno bridge error] ") + err.m_message, RTL_TEXTENCODING_ASCII_US ) ); - OSL_FAIL( cstr_msg.getStr() ); -#else - (void) err; // unused -#endif - } -} - -//__________________________________________________________________________________________________ -void SAL_CALL Bridge_free( uno_Mapping * mapping ) - SAL_THROW_EXTERN_C() -{ - Mapping * that = static_cast< Mapping * >( mapping ); - delete that->m_bridge; -} - -} //extern C -} //namespace - -namespace cli_uno -{ - -//__________________________________________________________________________________________________ -/** ToDo - I doubt that the the case that the ref count raises from 0 to 1 - can occur. uno_ext_getMapping returns an acquired mapping. Every time - that function is called then a new mapping is created. Following the - rules of ref counted objects, then if the ref count is null noone has - a reference to the object anymore. Hence noone can call acquire. If someone - calls acquire then they must have kept an unacquired pointer which is - illegal. - */ -void Bridge::acquire() const SAL_THROW( () ) -{ - if (1 == osl_incrementInterlockedCount( &m_ref )) - { - if (m_registered_cli2uno) - { - uno_Mapping * mapping = const_cast<Mapping*>(&m_cli2uno); - uno_registerMapping( - & const_cast<uno_Mapping*>(mapping), Bridge_free, m_uno_cli_env, (uno_Environment *)m_uno_env, 0 ); - } - else - { - uno_Mapping * mapping = const_cast<Mapping*>(&m_uno2cli); - uno_registerMapping( - &mapping, Bridge_free, (uno_Environment *)m_uno_env, m_uno_cli_env, 0 ); - } - } -} -//__________________________________________________________________________________________________ -void Bridge::release() const SAL_THROW( () ) -{ - if (! osl_decrementInterlockedCount( &m_ref )) - { - uno_revokeMapping( - m_registered_cli2uno - ? const_cast<Mapping*>(&m_cli2uno) - : const_cast<Mapping*>(&m_uno2cli) ); - } -} -//__________________________________________________________________________________________________ -Bridge::Bridge( - uno_Environment * uno_cli_env, uno_ExtEnvironment * uno_env, - bool registered_cli2uno ) - : m_ref( 1 ), - m_uno_env( uno_env ), - m_uno_cli_env( uno_cli_env ), - m_registered_cli2uno( registered_cli2uno ) -{ - OSL_ASSERT( 0 != m_uno_cli_env && 0 != m_uno_env ); - (*((uno_Environment *)m_uno_env)->acquire)( (uno_Environment *)m_uno_env ); - (*m_uno_cli_env->acquire)( m_uno_cli_env ); - - // cli2uno - m_cli2uno.acquire = Mapping_acquire; - m_cli2uno.release = Mapping_release; - m_cli2uno.mapInterface = Mapping_cli2uno; - m_cli2uno.m_bridge = this; - // uno2cli - m_uno2cli.acquire = Mapping_acquire; - m_uno2cli.release = Mapping_release; - m_uno2cli.mapInterface = Mapping_uno2cli; - m_uno2cli.m_bridge = this; - -} - -//__________________________________________________________________________________________________ -Bridge::~Bridge() SAL_THROW( () ) -{ - //System::GC::Collect(); - (*m_uno_cli_env->release)( m_uno_cli_env ); - (*((uno_Environment *)m_uno_env)->release)( (uno_Environment *)m_uno_env ); -} - - - -} //namespace cli_uno - -extern "C" -{ - -namespace cli_uno -{ -//-------------------------------------------------------------------------------------------------- -void SAL_CALL cli_env_disposing( uno_Environment * uno_cli_env ) - SAL_THROW_EXTERN_C() -{ - uno_cli_env->pContext = 0; -} - -//################################################################################################## -void SAL_CALL uno_initEnvironment( uno_Environment * uno_cli_env ) - SAL_THROW_EXTERN_C() -{ - //ToDo: remove when compiled with .NET 2 -#if defined(_MSC_VER) && (_MSC_VER < 1400) - __crt_dll_initialize(); -#endif - - uno_cli_env->environmentDisposing= cli_env_disposing; - uno_cli_env->pExtEnv = 0; - //Set the console to print Trace messages -#if OSL_DEBUG_LEVEL >= 1 - System::Diagnostics::Trace::get_Listeners()-> - Add( new System::Diagnostics::TextWriterTraceListener(System::Console::get_Out())); -#endif - OSL_ASSERT( 0 == uno_cli_env->pContext ); - - // We let the Cli_environment leak, since there is no good point where we could destruct it. - //dispose is not used because we would have then also synchronize the calls to proxies. If the - //Cli_environment is disposed, we must prevent all calls, otherwise we may crash at points - //where g_cli_env is accessed. - //When we compile the bridge with .NET 2 then we can again hold g_cli_env as a static gcroot - //member in a unmanaged class, such as Bridge. - CliEnvHolder::g_cli_env = new Cli_environment(); -} -//################################################################################################## -void SAL_CALL uno_ext_getMapping( - uno_Mapping ** ppMapping, uno_Environment * pFrom, uno_Environment * pTo ) - SAL_THROW_EXTERN_C() -{ - OSL_ASSERT( 0 != ppMapping && 0 != pFrom && 0 != pTo ); - if (*ppMapping) - { - (*(*ppMapping)->release)( *ppMapping ); - *ppMapping = 0; - } - - - OUString const & from_env_typename = *reinterpret_cast< OUString const * >( - &pFrom->pTypeName ); - OUString const & to_env_typename = *reinterpret_cast< OUString const * >( - &pTo->pTypeName ); - - uno_Mapping * mapping = 0; - - try - { - if (from_env_typename.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(UNO_LB_CLI) ) && - to_env_typename.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(UNO_LB_UNO) )) - { - Bridge * bridge = new Bridge( pFrom, pTo->pExtEnv, true ); // ref count = 1 - mapping = &bridge->m_cli2uno; - uno_registerMapping( - &mapping, Bridge_free, pFrom, (uno_Environment *)pTo->pExtEnv, 0 ); - } - else if (from_env_typename.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(UNO_LB_UNO) ) && - to_env_typename.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(UNO_LB_CLI) )) - { - Bridge * bridge = new Bridge( pTo, pFrom->pExtEnv, false ); // ref count = 1 - mapping = &bridge->m_uno2cli; - uno_registerMapping( - &mapping, Bridge_free, (uno_Environment *)pFrom->pExtEnv, pTo, 0 ); - } - } - catch (BridgeRuntimeError & err) - { -#if OSL_DEBUG_LEVEL >= 1 - OString cstr_msg( - OUStringToOString( - OUSTR("[cli_uno bridge error] ") + err.m_message, RTL_TEXTENCODING_ASCII_US ) ); - OSL_FAIL( cstr_msg.getStr() ); -#else - (void) err; // unused -#endif - } - *ppMapping = mapping; -} - - -//################################################################################################## -sal_Bool SAL_CALL component_canUnload( TimeValue * ) - SAL_THROW_EXTERN_C() -{ - return true; -} - -} -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |