diff options
Diffstat (limited to 'embedserv/source')
23 files changed, 411 insertions, 763 deletions
diff --git a/embedserv/source/embed/docholder.cxx b/embedserv/source/embed/docholder.cxx index 762352579d94..829db69b91d4 100644 --- a/embedserv/source/embed/docholder.cxx +++ b/embedserv/source/embed/docholder.cxx @@ -60,9 +60,12 @@ #include <com/sun/star/util/XCloseable.hpp> #include <com/sun/star/util/XModifyBroadcaster.hpp> #include <comphelper/processfactory.hxx> +#include <comphelper/propertyvalue.hxx> #include <o3tl/any.hxx> +#include <o3tl/unit_conversion.hxx> #include <osl/diagnose.h> #include <rtl/process.h> +#include <rtl/ref.hxx> using namespace ::com::sun::star; @@ -78,7 +81,6 @@ DocumentHolder::DocumentHolder( m_pIOleIPUIWindow(nullptr), m_pCHatchWin(nullptr), m_xOleAccess( xOleAccess ), - m_pInterceptor(nullptr), m_xFactory( xFactory ), m_bOnDeactivate(false), m_hWndxWinParent(nullptr), @@ -111,22 +113,22 @@ void DocumentHolder::LoadDocInFrame( bool bPluginMode ) uno::Reference< task::XInteractionHandler2 > xHandler( task::InteractionHandler::createWithParent(comphelper::getComponentContext(m_xFactory), nullptr) ); - sal_Int32 nLen = 3; + sal_Int32 nLen = bPluginMode ? 6 : 5; uno::Sequence<beans::PropertyValue> aSeq( nLen ); - - aSeq[0] = beans::PropertyValue( + auto pSeq = aSeq.getArray(); + pSeq[0] = beans::PropertyValue( "Model", -1, uno::Any(uno::Reference<uno::XInterface>(m_xDocument, uno::UNO_QUERY)), beans::PropertyState_DIRECT_VALUE); - aSeq[1] = beans::PropertyValue( + pSeq[1] = beans::PropertyValue( "ReadOnly", -1, uno::Any(false), beans::PropertyState_DIRECT_VALUE); - aSeq[2] = beans::PropertyValue( + pSeq[2] = beans::PropertyValue( "NoAutoSave", -1, uno::Any(true), @@ -134,22 +136,20 @@ void DocumentHolder::LoadDocInFrame( bool bPluginMode ) if ( bPluginMode ) { - aSeq.realloc( ++nLen ); - aSeq[nLen-1] = beans::PropertyValue( + pSeq[3] = beans::PropertyValue( "PluginMode", -1, uno::Any(sal_Int16(3)), beans::PropertyState_DIRECT_VALUE); } - aSeq.realloc( nLen+=2 ); - aSeq[nLen-2] = beans::PropertyValue( + pSeq[nLen-2] = beans::PropertyValue( "InteractionHandler", -1, uno::Any(xHandler), beans::PropertyState_DIRECT_VALUE); - aSeq[nLen-1] = beans::PropertyValue( + pSeq[nLen-1] = beans::PropertyValue( "MacroExecutionMode", -1, uno::Any(m_nMacroExecMode), @@ -701,9 +701,8 @@ void DocumentHolder::SetDocument( const uno::Reference< frame::XModel >& xDoc, b if ( m_xDocument.is() && !m_bLink ) { // set the document mode to embedded - uno::Sequence< beans::PropertyValue > aSeq(1); - aSeq[0].Name = "SetEmbedded"; - aSeq[0].Value <<= true; + uno::Sequence< beans::PropertyValue > aSeq{ comphelper::makePropertyValue("SetEmbedded", + true) }; m_xDocument->attachResource(OUString(),aSeq); } } @@ -798,14 +797,14 @@ void DocumentHolder::ClearInterceptorInternally() m_pInterceptor->DisconnectDocHolder(); m_xInterceptorLocker.clear(); - m_pInterceptor = nullptr; + m_pInterceptor.clear(); } void DocumentHolder::ClearInterceptor() { ::osl::MutexGuard aGuard( m_aMutex ); m_xInterceptorLocker.clear(); - m_pInterceptor = nullptr; + m_pInterceptor.clear(); } @@ -830,7 +829,7 @@ void DocumentHolder::show() if ( xLMProps.is() ) { xLMProps->setPropertyValue("MenuBarCloser", - uno::makeAny( uno::Reference< frame::XStatusListener >() ) ); + uno::Any( uno::Reference< frame::XStatusListener >() ) ); } if ( !m_bLink ) @@ -883,12 +882,12 @@ void DocumentHolder::resizeWin( const SIZEL& rNewSize ) POINT aOldOffset; aOldOffset.x = aOldSize.cx; aOldOffset.y = aOldSize.cy; - bool bIsOk = LPtoDP( hdc, &aOldOffset, 1 ); + LPtoDP( hdc, &aOldOffset, 1 ); POINT aNewOffset; aNewOffset.x = rNewSize.cx; aNewOffset.y = rNewSize.cy; - bIsOk = LPtoDP( hdc, &aNewOffset, 1 ); + LPtoDP( hdc, &aNewOffset, 1 ); ReleaseDC( nullptr, hdc ); @@ -919,7 +918,7 @@ void DocumentHolder::setTitle(const OUString& aDocumentName) if(m_xDocument.is()) { aSeq = m_xDocument->getArgs(); - for(beans::PropertyValue const & prop : std::as_const(aSeq)) + for (beans::PropertyValue const& prop : aSeq) { if(prop.Name == "FilterName") { @@ -938,7 +937,7 @@ void DocumentHolder::setTitle(const OUString& aDocumentName) if(xNameAccess.is() && (xNameAccess->getByName(aFilterName) >>= aSeq)) { - for(beans::PropertyValue const & prop : std::as_const(aSeq)) + for (beans::PropertyValue const& prop : aSeq) if(prop.Name == "UIName") { prop.Value >>= m_aFilterName; @@ -967,7 +966,7 @@ void DocumentHolder::setTitle(const OUString& aDocumentName) { ::osl::ClearableMutexGuard aGuard( m_aMutex ); - Interceptor* pTmpInter = nullptr; + rtl::Reference<Interceptor> pTmpInter; uno::Reference< frame::XDispatchProviderInterceptor > xLock( m_xInterceptorLocker ); if ( xLock.is() && m_pInterceptor ) pTmpInter = m_pInterceptor; @@ -1009,7 +1008,7 @@ IDispatch* DocumentHolder::GetIDispatch() try { uno::Any anyResult = xSupplier->createBridge( - uno::makeAny( m_xDocument ), + uno::Any( m_xDocument ), aProcId, bridge::ModelDependent::UNO, bridge::ModelDependent::OLE ); @@ -1075,8 +1074,8 @@ HRESULT DocumentHolder::SetExtent( const SIZEL *pSize ) if ( aMapMode == embed::EmbedMapUnits::TWIP ) { // conversion from ONE_100TH_MM - aNewSize.Width = aNewSize.Width * 144 / 254; - aNewSize.Height = aNewSize.Height * 144 / 254; + aNewSize.Width = o3tl::toTwips(aNewSize.Width, o3tl::Length::mm100); + aNewSize.Height = o3tl::toTwips(aNewSize.Height, o3tl::Length::mm100); } @@ -1109,8 +1108,8 @@ HRESULT DocumentHolder::GetExtent( SIZEL *pSize ) if ( aMapMode == embed::EmbedMapUnits::TWIP ) { // conversion to ONE_100TH_MM - aDocSize.Width = aDocSize.Width * 254 / 144; - aDocSize.Height = aDocSize.Height * 254 / 144; + aDocSize.Width = o3tl::convert(aDocSize.Width, o3tl::Length::twip, o3tl::Length::mm100); + aDocSize.Height = o3tl::convert(aDocSize.Height, o3tl::Length::twip, o3tl::Length::mm100); } pSize->cx = aDocSize.Width; diff --git a/embedserv/source/embed/ed_idataobj.cxx b/embedserv/source/embed/ed_idataobj.cxx index 2f0b4d960b16..84886e63cb4a 100644 --- a/embedserv/source/embed/ed_idataobj.cxx +++ b/embedserv/source/embed/ed_idataobj.cxx @@ -34,7 +34,7 @@ using namespace ::com::sun::star; sal_uInt64 EmbedDocument_Impl::getMetaFileHandle_Impl( bool isEnhMeta ) { - sal_uInt64 pResult = NULL; + sal_uInt64 pResult = 0; uno::Reference< datatransfer::XTransferable > xTransferable( m_pDocHolder->GetDocument(), uno::UNO_QUERY ); if ( xTransferable.is() ) @@ -132,7 +132,7 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::GetData( FORMATETC * pForm pMedium->tymed = TYMED_ISTORAGE; pMedium->pstg = pNewStg; pMedium->pstg->AddRef(); - pMedium->pUnkForRelease = static_cast<IUnknown*>(pNewStg); + pMedium->pUnkForRelease = pNewStg; return S_OK; } diff --git a/embedserv/source/embed/ed_ioleobject.cxx b/embedserv/source/embed/ed_ioleobject.cxx index 08032e9c8b2b..839fd8e2d3d5 100644 --- a/embedserv/source/embed/ed_ioleobject.cxx +++ b/embedserv/source/embed/ed_ioleobject.cxx @@ -329,7 +329,7 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::SetColorScheme( LOGPALETTE // IDispatch -COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::GetTypeInfoCount( unsigned int FAR* pctinfo ) +COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::GetTypeInfoCount(unsigned int* pctinfo) { if ( m_pDocHolder->GetIDispatch() ) return m_pDocHolder->GetIDispatch()->GetTypeInfoCount( pctinfo ); @@ -337,7 +337,8 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::GetTypeInfoCount( unsigned return E_NOTIMPL; } -COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::GetTypeInfo( unsigned int iTInfo, LCID lcid, ITypeInfo FAR* FAR* ppTInfo ) +COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::GetTypeInfo(unsigned int iTInfo, LCID lcid, + ITypeInfo** ppTInfo) { if ( m_pDocHolder->GetIDispatch() ) return m_pDocHolder->GetIDispatch()->GetTypeInfo( iTInfo, lcid, ppTInfo ); @@ -346,10 +347,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::GetTypeInfo( unsigned int } COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::GetIDsOfNames( REFIID riid, - OLECHAR FAR* FAR* rgszNames, + OLECHAR** rgszNames, unsigned int cNames, LCID lcid, - DISPID FAR* rgDispId ) + DISPID* rgDispId ) { if ( m_pDocHolder->GetIDispatch() ) return m_pDocHolder->GetIDispatch()->GetIDsOfNames( riid, rgszNames, cNames, lcid, rgDispId ); @@ -364,10 +365,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::Invoke( DISPID dispIdMembe REFIID riid, LCID lcid, WORD wFlags, - DISPPARAMS FAR* pDispParams, - VARIANT FAR* pVarResult, - EXCEPINFO FAR* pExcepInfo, - unsigned int FAR* puArgErr ) + DISPPARAMS* pDispParams, + VARIANT* pVarResult, + EXCEPINFO* pExcepInfo, + unsigned int* puArgErr ) { if ( m_pDocHolder->GetIDispatch() ) return m_pDocHolder->GetIDispatch()->Invoke( dispIdMember, @@ -446,11 +447,9 @@ void EmbedDocument_Impl::notify( bool bDataChanged ) void EmbedDocument_Impl::Deactivate() { - HRESULT hr = S_OK; - if ( m_pDocHolder->HasFrame() ) { - hr = SaveObject(); + SaveObject(); m_pDocHolder->CloseFrame(); OLENotifyDeactivation(); } diff --git a/embedserv/source/embed/ed_ipersiststr.cxx b/embedserv/source/embed/ed_ipersiststr.cxx index 68d3a45dd94b..698bbe13f586 100644 --- a/embedserv/source/embed/ed_ipersiststr.cxx +++ b/embedserv/source/embed/ed_ipersiststr.cxx @@ -175,7 +175,6 @@ EmbedDocument_Impl::EmbedDocument_Impl( const uno::Reference< lang::XMultiServic { m_xOwnAccess = new EmbeddedDocumentInstanceAccess_Impl( this ); m_pDocHolder = new DocumentHolder( xFactory, m_xOwnAccess ); - m_pDocHolder->acquire(); } EmbedDocument_Impl::~EmbedDocument_Impl() @@ -192,28 +191,25 @@ EmbedDocument_Impl::~EmbedDocument_Impl() m_pDocHolder->CloseDocument(); m_pDocHolder->CloseFrame(); } - - m_pDocHolder->release(); } uno::Sequence< beans::PropertyValue > EmbedDocument_Impl::fillArgsForLoading_Impl( uno::Reference< io::XInputStream > const & xStream, DWORD /*nStreamMode*/, LPCOLESTR pFilePath ) { - uno::Sequence< beans::PropertyValue > aArgs( 3 ); - - sal_Int32 nInd = 0; // must not be bigger than the preset size - aArgs[nInd].Name = "FilterName"; - aArgs[nInd++].Value <<= getFilterNameFromGUID_Impl( &m_guid ); + uno::Sequence< beans::PropertyValue > aArgs( xStream.is() ? 3 : 2 ); + auto pArgs = aArgs.getArray(); + pArgs[0].Name = "FilterName"; + pArgs[0].Value <<= getFilterNameFromGUID_Impl( &m_guid ); if ( xStream.is() ) { - aArgs[nInd].Name = "InputStream"; - aArgs[nInd++].Value <<= xStream; - aArgs[nInd].Name = "URL"; - aArgs[nInd++].Value <<= OUString( "private:stream" ); + pArgs[1].Name = "InputStream"; + pArgs[1].Value <<= xStream; + pArgs[2].Name = "URL"; + pArgs[2].Value <<= OUString( "private:stream" ); } else { - aArgs[nInd].Name = "URL"; + pArgs[1].Name = "URL"; OUString sDocUrl; if ( pFilePath ) @@ -227,11 +223,9 @@ uno::Sequence< beans::PropertyValue > EmbedDocument_Impl::fillArgsForLoading_Imp sDocUrl = aURL.Complete; } - aArgs[nInd++].Value <<= sDocUrl; + pArgs[1].Value <<= sDocUrl; } - aArgs.realloc( nInd ); - // aArgs[].Name = "ReadOnly"; // aArgs[].Value <<= sal_False; //( ( nStreamMode & ( STGM_READWRITE | STGM_WRITE ) ) ? sal_True : sal_False ); @@ -241,14 +235,14 @@ uno::Sequence< beans::PropertyValue > EmbedDocument_Impl::fillArgsForLoading_Imp uno::Sequence< beans::PropertyValue > EmbedDocument_Impl::fillArgsForStoring_Impl( uno::Reference< io::XOutputStream > const & xStream) { uno::Sequence< beans::PropertyValue > aArgs( xStream.is() ? 2 : 1 ); - - aArgs[0].Name = "FilterName"; - aArgs[0].Value <<= getFilterNameFromGUID_Impl( &m_guid ); + auto pArgs = aArgs.getArray(); + pArgs[0].Name = "FilterName"; + pArgs[0].Value <<= getFilterNameFromGUID_Impl( &m_guid ); if ( xStream.is() ) { - aArgs[1].Name = "OutputStream"; - aArgs[1].Value <<= xStream; + pArgs[1].Name = "OutputStream"; + pArgs[1].Value <<= xStream; } return aArgs; @@ -274,7 +268,7 @@ HRESULT EmbedDocument_Impl::SaveTo_Impl( IStorage* pStg ) // IUnknown -COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::QueryInterface( REFIID riid, void FAR* FAR* ppv ) +COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::QueryInterface(REFIID riid, void** ppv) { if(IsEqualIID(riid, IID_IUnknown)) { @@ -588,7 +582,7 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedDocument_Impl::Save( IStorage *pStgSave, if ( !fSameAsLoad && pStgSave != m_pMasterStorage ) { OSL_ENSURE( m_pMasterStorage, "How could the document be initialized without storage!??" ); - HRESULT hr = m_pMasterStorage->CopyTo( NULL, nullptr, nullptr, pStgSave ); + HRESULT hr = m_pMasterStorage->CopyTo( 0, nullptr, nullptr, pStgSave ); if ( FAILED( hr ) ) return E_FAIL; STATSTG aStat; diff --git a/embedserv/source/embed/guid.hxx b/embedserv/source/embed/guid.hxx index 2cbf28b5b93a..9e1d8006ebda 100644 --- a/embedserv/source/embed/guid.hxx +++ b/embedserv/source/embed/guid.hxx @@ -16,9 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ - -#ifndef INCLUDED_EMBEDSERV_SOURCE_EMBED_GUID_HXX -#define INCLUDED_EMBEDSERV_SOURCE_EMBED_GUID_HXX +#pragma once #include <sal/config.h> @@ -34,6 +32,4 @@ std::u16string_view getServiceNameFromGUID_Impl(GUID const*); wchar_t const* getStorageTypeFromGUID_Impl(GUID const* guid); -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/embed/iipaobj.cxx b/embedserv/source/embed/iipaobj.cxx index 6947b1ea6ba8..008a33f11925 100644 --- a/embedserv/source/embed/iipaobj.cxx +++ b/embedserv/source/embed/iipaobj.cxx @@ -35,7 +35,7 @@ CIIAObj::~CIIAObj() /* IUnknown methods */ -STDMETHODIMP CIIAObj::QueryInterface(REFIID riid, LPVOID FAR *ppv) +STDMETHODIMP CIIAObj::QueryInterface(REFIID riid, LPVOID* ppv) { *ppv=nullptr; diff --git a/embedserv/source/embed/intercept.cxx b/embedserv/source/embed/intercept.cxx index ebe94913744b..d321bbfa476c 100644 --- a/embedserv/source/embed/intercept.cxx +++ b/embedserv/source/embed/intercept.cxx @@ -17,7 +17,6 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #include <cppuhelper/weak.hxx> -#include <cppuhelper/interfacecontainer.hxx> #include <embeddoc.hxx> #include <docholder.hxx> @@ -28,18 +27,14 @@ using namespace ::com::sun::star; #define IUL 6 +constexpr OUString IU0 = u".uno:Save"_ustr; +constexpr OUString IU1 = u".uno:SaveAll"_ustr; +constexpr OUString IU2 = u".uno:CloseDoc"_ustr; +constexpr OUString IU3 = u".uno:CloseWin"_ustr; +constexpr OUString IU4 = u".uno:CloseFrame"_ustr; +constexpr OUString IU5 = u".uno:SaveAs"_ustr; +const uno::Sequence< OUString > Interceptor::m_aInterceptedURL{ IU0, IU1, IU2, IU3, IU4, IU5}; -uno::Sequence< OUString > Interceptor::m_aInterceptedURL(IUL); - -class StatusChangeListenerContainer - : public cppu::OMultiTypeInterfaceContainerHelperVar<OUString> -{ -public: - explicit StatusChangeListenerContainer(osl::Mutex& aMutex) - : cppu::OMultiTypeInterfaceContainerHelperVar<OUString>(aMutex) - { - } -}; void @@ -90,18 +85,12 @@ Interceptor::Interceptor( DocumentHolder* pDocH, bool bLink ) : m_xOleAccess( xOleAccess ), - m_xDocHLocker( static_cast< ::cppu::OWeakObject* >( pDocH ) ), + m_xDocHLocker( cppu::getXWeak( pDocH ) ), m_pDocH(pDocH), m_pDisposeEventListeners(nullptr), m_pStatCL(nullptr), m_bLink( bLink ) { - m_aInterceptedURL[0] = ".uno:Save"; - m_aInterceptedURL[1] = ".uno:SaveAll"; - m_aInterceptedURL[2] = ".uno:CloseDoc"; - m_aInterceptedURL[3] = ".uno:CloseWin"; - m_aInterceptedURL[4] = ".uno:CloseFrame"; - m_aInterceptedURL[5] = ".uno:SaveAs"; } @@ -165,7 +154,7 @@ Interceptor::dispatch( { if ( aNewArgs[nInd].Name == "SaveTo" ) { - aNewArgs[nInd].Value <<= true; + aNewArgs.getArray()[nInd].Value <<= true; break; } nInd++; @@ -174,8 +163,9 @@ Interceptor::dispatch( if ( nInd == aNewArgs.getLength() ) { aNewArgs.realloc( nInd + 1 ); - aNewArgs[nInd].Name = "SaveTo"; - aNewArgs[nInd].Value <<= true; + auto pNewArgs = aNewArgs.getArray(); + pNewArgs[nInd].Name = "SaveTo"; + pNewArgs[nInd].Value <<= true; } uno::Reference< frame::XDispatch > xDispatch = m_xSlaveDispatchProvider->queryDispatch( @@ -210,12 +200,12 @@ void Interceptor::generateFeatureStateEvent() if( i == 1 || (m_bLink && i != 5) ) continue; - cppu::OInterfaceContainerHelper* pICH = + comphelper::OInterfaceContainerHelper3<css::frame::XStatusListener>* pICH = m_pStatCL->getContainer(m_aInterceptedURL[i]); - uno::Sequence<uno::Reference<uno::XInterface> > aSeq; - if(pICH) - aSeq = pICH->getElements(); - if(!aSeq.getLength()) + if(!pICH) + continue; + std::vector<uno::Reference<css::frame::XStatusListener> > aSeq = pICH->getElements(); + if(aSeq.empty()) continue; frame::FeatureStateEvent aStateEvent; @@ -243,13 +233,8 @@ void Interceptor::generateFeatureStateEvent() } - for(uno::Reference<uno::XInterface> const & k : std::as_const(aSeq)) - { - uno::Reference<frame::XStatusListener> Control(k,uno::UNO_QUERY); - if(Control.is()) - Control->statusChanged(aStateEvent); - - } + for (uno::Reference<css::frame::XStatusListener> const& control : aSeq) + control->statusChanged(aStateEvent); } } } @@ -383,13 +368,7 @@ Interceptor::getInterceptedURLs( ) { // now implemented as update if ( m_bLink ) - { - uno::Sequence< OUString > aResult( 2 ); - aResult[0] = m_aInterceptedURL[1]; - aResult[1] = m_aInterceptedURL[5]; - - return aResult; - } + return { m_aInterceptedURL[1], m_aInterceptedURL[5] }; return m_aInterceptedURL; } @@ -435,20 +414,20 @@ Interceptor::queryDispatches( aRet = m_xSlaveDispatchProvider->queryDispatches(Requests); else aRet.realloc(Requests.getLength()); - + auto aRetRange = asNonConstRange(aRet); for(sal_Int32 i = 0; i < Requests.getLength(); ++i) if ( !m_bLink && m_aInterceptedURL[0] == Requests[i].FeatureURL.Complete ) - aRet[i] = static_cast<frame::XDispatch*>(this); + aRetRange[i] = static_cast<frame::XDispatch*>(this); else if(m_aInterceptedURL[1] == Requests[i].FeatureURL.Complete) - aRet[i] = nullptr; + aRetRange[i] = nullptr; else if( !m_bLink && m_aInterceptedURL[2] == Requests[i].FeatureURL.Complete ) - aRet[i] = static_cast<frame::XDispatch*>(this); + aRetRange[i] = static_cast<frame::XDispatch*>(this); else if( !m_bLink && m_aInterceptedURL[3] == Requests[i].FeatureURL.Complete ) - aRet[i] = static_cast<frame::XDispatch*>(this); + aRetRange[i] = static_cast<frame::XDispatch*>(this); else if( !m_bLink && m_aInterceptedURL[4] == Requests[i].FeatureURL.Complete ) - aRet[i] = static_cast<frame::XDispatch*>(this); + aRetRange[i] = static_cast<frame::XDispatch*>(this); else if(m_aInterceptedURL[5] == Requests[i].FeatureURL.Complete) - aRet[i] = static_cast<frame::XDispatch*>(this); + aRetRange[i] = static_cast<frame::XDispatch*>(this); return aRet; } diff --git a/embedserv/source/embed/servprov.cxx b/embedserv/source/embed/servprov.cxx index 46454667a42c..44eab63dd8b7 100644 --- a/embedserv/source/embed/servprov.cxx +++ b/embedserv/source/embed/servprov.cxx @@ -43,50 +43,9 @@ const GUID* const guidList[ SUPPORTED_FACTORIES_NUM ] = { &OID_MathOASISServer }; -namespace { - -class CurThreadData -{ - public: - CurThreadData(); - virtual ~CurThreadData(); - - bool setData(void *pData); - - void* getData(); - - protected: - oslThreadKey m_hKey; -}; - -} - -CurThreadData::CurThreadData() : m_hKey(osl_createThreadKey( nullptr )) -{ -} - -CurThreadData::~CurThreadData() -{ - osl_destroyThreadKey(m_hKey); -} - -bool CurThreadData::setData(void *pData) -{ - OSL_ENSURE( m_hKey, "No thread key!" ); - return osl_setThreadKeyData(m_hKey, pData); -} - -void *CurThreadData::getData() -{ - OSL_ENSURE( m_hKey, "No thread key!" ); - return osl_getThreadKeyData(m_hKey); -} - static void o2u_attachCurrentThread() { - static CurThreadData oleThreadData; - - if ( oleThreadData.getData() != nullptr ) + [[maybe_unused]] static thread_local bool aInit = [] { HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); if (!SUCCEEDED(hr)) @@ -95,8 +54,8 @@ static void o2u_attachCurrentThread() SAL_INFO("embedserv.ole", "CoInitializeEx fail: probably thread is in STA already?"); } - oleThreadData.setData(reinterpret_cast<void*>(true)); - } + return SUCCEEDED(hr); + }(); } @@ -173,7 +132,7 @@ bool EmbedProviderFactory_Impl::deregisterClass() return (hresult == NOERROR); } -COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedProviderFactory_Impl::QueryInterface(REFIID riid, void FAR* FAR* ppv) +COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedProviderFactory_Impl::QueryInterface(REFIID riid, void** ppv) { if(IsEqualIID(riid, IID_IUnknown)) { @@ -209,13 +168,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP_(ULONG) EmbedProviderFactory_Impl::Release() return nCount; } -COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedProviderFactory_Impl::CreateInstance(IUnknown FAR* punkOuter, - REFIID riid, - void FAR* FAR* ppv) +COM_DECLSPEC_NOTHROW STDMETHODIMP EmbedProviderFactory_Impl::CreateInstance(IUnknown*, + REFIID riid, void** ppv) { - punkOuter = nullptr; - - IUnknown* pEmbedDocument = static_cast<IUnknown*>(static_cast<IPersistStorage*>( new EmbedDocument_Impl( m_xFactory, &m_guid ) )); + IUnknown* pEmbedDocument = static_cast<IPersistStorage*>( new EmbedDocument_Impl( m_xFactory, &m_guid ) ); return pEmbedDocument->QueryInterface( riid, ppv ); } diff --git a/embedserv/source/embed/tracker.cxx b/embedserv/source/embed/tracker.cxx index 00260481c0a8..fb331dfa1478 100644 --- a/embedserv/source/embed/tracker.cxx +++ b/embedserv/source/embed/tracker.cxx @@ -22,11 +22,18 @@ #include <algorithm> #include <sal/types.h> +#include <sal/log.hxx> #include <stdafx.h> #include <stddef.h> #include <syswinwrapper.hxx> +// windowserrorstring.hxx includes postwin.h, which #undef OPAQUE, so "#redef" it +#include <comphelper/windowserrorstring.hxx> +#ifdef OPAQUE +#error OPAQUE should not be defined!? +#endif +#define OPAQUE 2 static HCURSOR afxCursors[10] = { nullptr, }; static HBRUSH afxHalftoneBrush = nullptr; @@ -194,17 +201,10 @@ void winwrap::TransformRect(LPRECT rect,HWND pWnd,HWND pWndClipTo) static void NormalizeRect(LPRECT rp) { - if(rp->left > rp->right) { - UINT tmp = rp->left; - rp->left = rp->right; - rp->right = tmp; - } - - if(rp->top > rp->bottom) { - UINT tmp = rp->top; - rp->top = rp->bottom; - rp->bottom = tmp; - } + if(rp->left > rp->right) + std::swap(rp->left, rp->right); + if(rp->top > rp->bottom) + std::swap(rp->top, rp->bottom); } @@ -398,7 +398,10 @@ BOOL Tracker::TrackHandle(int nHandle,HWND hWnd,POINT point,HWND hWndClipTo) for (;;) { MSG msg; - GetMessageW(&msg, nullptr, 0, 0); + int const bRet = GetMessageW(&msg, nullptr, 0, 0); + SAL_WARN_IF(-1 == bRet, "embedserv", "GetMessageW failed: " << WindowsErrorString(GetLastError())); + if (-1 == bRet || 0 == bRet) + break; if (GetCapture() != hWnd) break; diff --git a/embedserv/source/inc/docholder.hxx b/embedserv/source/inc/docholder.hxx index 7cb85af0fbf6..844435e3de83 100644 --- a/embedserv/source/inc/docholder.hxx +++ b/embedserv/source/inc/docholder.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_EMBEDSERV_SOURCE_INC_DOCHOLDER_HXX -#define INCLUDED_EMBEDSERV_SOURCE_INC_DOCHOLDER_HXX +#pragma once #include "common.h" #include <com/sun/star/frame/XLayoutManager.hpp> @@ -62,7 +61,7 @@ private: ::rtl::Reference< EmbeddedDocumentInstanceAccess_Impl > m_xOleAccess; css::uno::WeakReference< css::frame::XDispatchProviderInterceptor > m_xInterceptorLocker; - Interceptor* m_pInterceptor; + rtl::Reference<Interceptor> m_pInterceptor; css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory; @@ -248,6 +247,4 @@ public: ) override; }; -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inc/embeddoc.hxx b/embedserv/source/inc/embeddoc.hxx index 488b142bc1a8..1ff0ed338cf4 100644 --- a/embedserv/source/inc/embeddoc.hxx +++ b/embedserv/source/inc/embeddoc.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_EMBEDSERV_SOURCE_INC_EMBEDDOC_HXX -#define INCLUDED_EMBEDSERV_SOURCE_INC_EMBEDDOC_HXX +#pragma once #include "common.h" #include <oleidl.h> @@ -26,6 +25,7 @@ #include <com/sun/star/uno/Reference.h> #include <com/sun/star/uno/Sequence.h> +#include <rtl/ref.hxx> #include <unordered_map> #include "embeddocaccess.hxx" @@ -63,7 +63,7 @@ public: virtual ~EmbedDocument_Impl(); /* IUnknown methods */ - STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR * ppvObj) override; + STDMETHOD(QueryInterface)(REFIID riid, LPVOID* ppvObj) override; STDMETHOD_(ULONG, AddRef)() override; STDMETHOD_(ULONG, Release)() override; @@ -127,10 +127,10 @@ public: STDMETHOD(GetCurFile) ( LPOLESTR *ppszFileName ) override; /* IDispatch methods */ - STDMETHOD(GetTypeInfoCount) ( unsigned int FAR* pctinfo ) override; - STDMETHOD(GetTypeInfo) ( unsigned int iTInfo, LCID lcid, ITypeInfo FAR* FAR* ppTInfo ) override; - STDMETHOD(GetIDsOfNames) ( REFIID riid, OLECHAR FAR* FAR* rgszNames, unsigned int cNames, LCID lcid, DISPID FAR* rgDispId ) override; - STDMETHOD(Invoke) ( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult, EXCEPINFO FAR* pExcepInfo, unsigned int FAR* puArgErr ) override; + STDMETHOD(GetTypeInfoCount)(unsigned int* pctinfo) override; + STDMETHOD(GetTypeInfo)(unsigned int iTInfo, LCID lcid, ITypeInfo** ppTInfo) override; + STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR** rgszNames, unsigned int cNames, LCID lcid, DISPID* rgDispId) override; + STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr) override; /* IExternalConnection methods */ virtual DWORD STDMETHODCALLTYPE AddConnection( DWORD extconn, DWORD reserved) override; @@ -152,7 +152,7 @@ protected: css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory; - DocumentHolder* m_pDocHolder; + rtl::Reference<DocumentHolder> m_pDocHolder; OUString m_aFileName; CComPtr< IStorage > m_pMasterStorage; @@ -190,6 +190,4 @@ public: } }; -#endif // INCLUDED_EMBEDSERV_SOURCE_INC_EMBEDDOC_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inc/embeddocaccess.hxx b/embedserv/source/inc/embeddocaccess.hxx index 8b03900afd82..0a84b92c2cbe 100644 --- a/embedserv/source/inc/embeddocaccess.hxx +++ b/embedserv/source/inc/embeddocaccess.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_EMBEDSERV_SOURCE_INC_EMBEDDOCACCESS_HXX -#define INCLUDED_EMBEDSERV_SOURCE_INC_EMBEDDOCACCESS_HXX +#pragma once #define OLESERV_SAVEOBJECT 1 #define OLESERV_CLOSE 2 @@ -33,7 +32,6 @@ #pragma clang diagnostic ignored "-Wall" #pragma clang diagnostic ignored "-Wextra" #pragma clang diagnostic ignored "-Wmicrosoft" -#pragma clang diagnostic ignored "-Wnon-virtual-dtor" #endif #include <atldbcli.h> #if defined __clang__ @@ -75,6 +73,4 @@ class EmbeddedDocumentInstanceAccess_Impl : public ::cppu::OWeakObject void ClearEmbedDocument(); }; -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inc/iipaobj.hxx b/embedserv/source/inc/iipaobj.hxx index 8bcc04688385..a6851e1277cb 100644 --- a/embedserv/source/inc/iipaobj.hxx +++ b/embedserv/source/inc/iipaobj.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_EMBEDSERV_SOURCE_INC_IIPAOBJ_HXX -#define INCLUDED_EMBEDSERV_SOURCE_INC_IIPAOBJ_HXX +#pragma once #include "stdafx.h" #include <oleidl.h> @@ -38,7 +37,7 @@ public: virtual ~CIIAObj(); /* IUnknown methods */ - STDMETHODIMP QueryInterface(REFIID, LPVOID FAR * ppvObj) override; + STDMETHODIMP QueryInterface(REFIID, LPVOID* ppvObj) override; STDMETHODIMP_(ULONG) AddRef() override; STDMETHODIMP_(ULONG) Release() override; @@ -59,6 +58,4 @@ private: ::rtl::Reference< DocumentHolder > m_rDocHolder; }; - -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inc/intercept.hxx b/embedserv/source/inc/intercept.hxx index ab3fb63cad8f..665f26aa82b9 100644 --- a/embedserv/source/inc/intercept.hxx +++ b/embedserv/source/inc/intercept.hxx @@ -17,11 +17,11 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_EMBEDSERV_SOURCE_INC_INTERCEPT_HXX -#define INCLUDED_EMBEDSERV_SOURCE_INC_INTERCEPT_HXX +#pragma once #include <osl/mutex.hxx> #include <cppuhelper/implbase.hxx> +#include <comphelper/multiinterfacecontainer3.hxx> #include <comphelper/interfacecontainer2.hxx> #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp> #include <com/sun/star/frame/XInterceptorInfo.hpp> @@ -31,10 +31,11 @@ #include "embeddocaccess.hxx" -class StatusChangeListenerContainer; class EmbedDocument_Impl; class DocumentHolder; +using StatusChangeListenerContainer = comphelper::OMultiTypeInterfaceContainerHelperVar3<css::frame::XStatusListener, OUString>; + class Interceptor : public ::cppu::WeakImplHelper< css::frame::XDispatchProviderInterceptor, @@ -136,7 +137,7 @@ private: css::uno::Reference< css::frame::XDispatchProvider > m_xMasterDispatchProvider; - static css::uno::Sequence< OUString > m_aInterceptedURL; + static const css::uno::Sequence< OUString > m_aInterceptedURL; comphelper::OInterfaceContainerHelper2* m_pDisposeEventListeners; StatusChangeListenerContainer* m_pStatCL; @@ -144,6 +145,4 @@ private: bool m_bLink; }; -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inc/servprov.hxx b/embedserv/source/inc/servprov.hxx index 6d1d887da4c0..f2b30fb6ccaa 100644 --- a/embedserv/source/inc/servprov.hxx +++ b/embedserv/source/inc/servprov.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_EMBEDSERV_SOURCE_INC_SERVPROV_HXX -#define INCLUDED_EMBEDSERV_SOURCE_INC_SERVPROV_HXX +#pragma once #include "common.h" #include <oleidl.h> @@ -60,12 +59,12 @@ public: bool deregisterClass(); /* IUnknown methods */ - STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR * ppvObj) override; + STDMETHOD(QueryInterface)(REFIID riid, LPVOID* ppvObj) override; STDMETHOD_(ULONG, AddRef)() override; STDMETHOD_(ULONG, Release)() override; /* IClassFactory methods */ - STDMETHOD(CreateInstance)(IUnknown FAR* punkOuter, REFIID riid, void FAR* FAR* ppv) override; + STDMETHOD(CreateInstance)(IUnknown* punkOuter, REFIID riid, void** ppv) override; STDMETHOD(LockServer)(int fLock) override; protected: @@ -77,6 +76,4 @@ protected: css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory; }; -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inc/stdafx.h b/embedserv/source/inc/stdafx.h index 9ec4fffcabee..44b79de4e600 100644 --- a/embedserv/source/inc/stdafx.h +++ b/embedserv/source/inc/stdafx.h @@ -18,7 +18,6 @@ #pragma clang diagnostic ignored "-Winvalid-noreturn" #pragma clang diagnostic ignored "-Wmicrosoft" #pragma clang diagnostic ignored "-Wnon-pod-varargs" -#pragma clang diagnostic ignored "-Wnon-virtual-dtor" #pragma clang diagnostic ignored "-Wnonportable-include-path" #pragma clang diagnostic ignored "-Wsequence-point" #pragma clang diagnostic ignored "-Wtypename-missing" diff --git a/embedserv/source/inc/syswinwrapper.hxx b/embedserv/source/inc/syswinwrapper.hxx index f255058bff26..46ec83ae4052 100644 --- a/embedserv/source/inc/syswinwrapper.hxx +++ b/embedserv/source/inc/syswinwrapper.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_EMBEDSERV_SOURCE_INC_SYSWINWRAPPER_HXX -#define INCLUDED_EMBEDSERV_SOURCE_INC_SYSWINWRAPPER_HXX +#pragma once #if !defined WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN @@ -171,6 +170,4 @@ protected: } -#endif // INCLUDED_EMBEDSERV_SOURCE_INC_SYSWINWRAPPER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inprocserv/advisesink.cxx b/embedserv/source/inprocserv/advisesink.cxx index faf37e20e4fd..f06cffbf62cd 100644 --- a/embedserv/source/inprocserv/advisesink.cxx +++ b/embedserv/source/inprocserv/advisesink.cxx @@ -36,7 +36,7 @@ OleWrapperAdviseSink::OleWrapperAdviseSink() { } -OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener ) +OleWrapperAdviseSink::OleWrapperAdviseSink( const sal::systools::COMReference< IAdviseSink >& pListener ) : m_nRefCount( 0 ) , m_pListener( pListener ) , m_nAspect( DVASPECT_CONTENT ) @@ -49,7 +49,7 @@ OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pList { } -OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener, FORMATETC* pFormatEtc, DWORD nDataRegFlag ) +OleWrapperAdviseSink::OleWrapperAdviseSink( const sal::systools::COMReference< IAdviseSink >& pListener, FORMATETC* pFormatEtc, DWORD nDataRegFlag ) : m_nRefCount( 0 ) , m_pListener( pListener ) , m_nAspect( DVASPECT_CONTENT ) @@ -71,7 +71,7 @@ OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pList } } -OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener, DWORD nAspect, DWORD nViewRegFlag ) +OleWrapperAdviseSink::OleWrapperAdviseSink( const sal::systools::COMReference< IAdviseSink >& pListener, DWORD nAspect, DWORD nViewRegFlag ) : m_nRefCount( 0 ) , m_pListener( pListener ) , m_nAspect( nAspect ) diff --git a/embedserv/source/inprocserv/advisesink.hxx b/embedserv/source/inprocserv/advisesink.hxx index 1a89e38b4c3b..525a655087c8 100644 --- a/embedserv/source/inprocserv/advisesink.hxx +++ b/embedserv/source/inprocserv/advisesink.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_EMBEDSERV_SOURCE_INPROCSERV_ADVISESINK_HXX -#define INCLUDED_EMBEDSERV_SOURCE_INPROCSERV_ADVISESINK_HXX +#pragma once #include <sal/config.h> @@ -29,7 +28,7 @@ #endif #include <windows.h> #include <objidl.h> -#include "smartpointer.hxx" +#include <systools/win32/comtools.hxx> namespace inprocserv { @@ -38,7 +37,7 @@ class OleWrapperAdviseSink : public IAdviseSink protected: ULONG m_nRefCount; - ComSmart<IAdviseSink> m_pListener; + sal::systools::COMReference<IAdviseSink> m_pListener; DWORD m_nListenerID; std::unique_ptr<FORMATETC> m_pFormatEtc; @@ -57,14 +56,15 @@ public: OleWrapperAdviseSink(); // an AdviseSink for IOleObject interface - explicit OleWrapperAdviseSink(const ComSmart<IAdviseSink>& pListener); + explicit OleWrapperAdviseSink(const sal::systools::COMReference<IAdviseSink>& pListener); // an AdviseSink for IDataObject interface - OleWrapperAdviseSink(const ComSmart<IAdviseSink>& pListener, FORMATETC* pFormatEtc, - DWORD nDataRegFlag); + OleWrapperAdviseSink(const sal::systools::COMReference<IAdviseSink>& pListener, + FORMATETC* pFormatEtc, DWORD nDataRegFlag); // an AdviseSink for IViewObject interface - OleWrapperAdviseSink(const ComSmart<IAdviseSink>& pListener, DWORD nAspect, DWORD nViewRegFlag); + OleWrapperAdviseSink(const sal::systools::COMReference<IAdviseSink>& pListener, DWORD nAspect, + DWORD nViewRegFlag); virtual ~OleWrapperAdviseSink(); @@ -77,7 +77,7 @@ public: FORMATETC* GetFormatEtc() { return m_pFormatEtc.get(); } DWORD GetAspect() { return m_nAspect; } - ComSmart<IAdviseSink>& GetOrigAdvise() { return m_pListener; } + sal::systools::COMReference<IAdviseSink>& GetOrigAdvise() { return m_pListener; } void DisconnectOrigAdvise() { m_pListener = nullptr; } void SetClosed() { m_bClosed = TRUE; } @@ -97,6 +97,4 @@ public: }; // namespace advisesink -#endif // INCLUDED_EMBEDSERV_SOURCE_INPROCSERV_ADVISESINK_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inprocserv/dllentry.cxx b/embedserv/source/inprocserv/dllentry.cxx index 78b7d18edf0a..12dee7b0cc85 100644 --- a/embedserv/source/inprocserv/dllentry.cxx +++ b/embedserv/source/inprocserv/dllentry.cxx @@ -95,8 +95,8 @@ namespace { for ( int nInd = 0; nInd < SUPPORTED_FACTORIES_NUM; nInd++ ) { const wchar_t pSubKeyTemplate[] = L"Software\\Classes\\CLSID\\.....................................\\InprocHandler32"; - wchar_t pSubKey[SAL_N_ELEMENTS(pSubKeyTemplate)]; - wcsncpy(pSubKey, pSubKeyTemplate, SAL_N_ELEMENTS(pSubKeyTemplate)); + wchar_t pSubKey[std::size(pSubKeyTemplate)]; + wcsncpy(pSubKey, pSubKeyTemplate, std::size(pSubKeyTemplate)); int nGuidLen = GetStringFromClassID( *guidList[nInd], &pSubKey[23], 38 ); @@ -147,7 +147,7 @@ public: STDMETHOD_(ULONG, Release)() override; /* IClassFactory methods */ - STDMETHOD(CreateInstance)(IUnknown FAR* punkOuter, REFIID riid, void FAR* FAR* ppv) override; + STDMETHOD(CreateInstance)(IUnknown* punkOuter, REFIID riid, void** ppv) override; STDMETHOD(LockServer)(BOOL fLock) override; protected: @@ -203,7 +203,10 @@ STDAPI DllCanUnloadNow() STDAPI DllRegisterServer() { - HMODULE aCurModule = GetModuleHandleW( L"inprocserv.dll" ); + HMODULE aCurModule{}; + GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS + | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + reinterpret_cast<LPCWSTR>(&DllRegisterServer), &aCurModule); if( aCurModule ) { wchar_t aLibPath[1024]; @@ -298,9 +301,8 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP_(ULONG) InprocEmbedProvider_Impl::Release() } -COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedProvider_Impl::CreateInstance(IUnknown FAR* punkOuter, - REFIID riid, - void FAR* FAR* ppv) +COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedProvider_Impl::CreateInstance(IUnknown* punkOuter, + REFIID riid, void** ppv) { // TODO/LATER: should the aggregation be supported? // if ( punkOuter != NULL && riid != IID_IUnknown ) diff --git a/embedserv/source/inprocserv/inprocembobj.cxx b/embedserv/source/inprocserv/inprocembobj.cxx index 23a1df21a579..b7bf89b6670a 100644 --- a/embedserv/source/inprocserv/inprocembobj.cxx +++ b/embedserv/source/inprocserv/inprocembobj.cxx @@ -27,6 +27,19 @@ namespace inprocserv namespace { +class ULONGGuard +{ + ULONG& m_rValue; + +public: + explicit ULONGGuard( ULONG& rValue ) + : m_rValue( ++rValue ) + { + } + + ~ULONGGuard() { --m_rValue; } +}; + void SetName( LPCOLESTR pszNameFromOutside, wchar_t*& pOwnName ) { if ( !pszNameFromOutside ) @@ -49,7 +62,7 @@ void SetName( LPCOLESTR pszNameFromOutside, wchar_t*& pOwnName ) pOwnName[nLen] = 0; } -DWORD InsertAdviseLinkToList( const ComSmart<OleWrapperAdviseSink>& pOwnAdvise, ComSmart< OleWrapperAdviseSink > pAdvises[] ) +DWORD InsertAdviseLinkToList( const sal::systools::COMReference<OleWrapperAdviseSink>& pOwnAdvise, sal::systools::COMReference< OleWrapperAdviseSink > pAdvises[] ) { // the result should start from 1 in case of success, the element 0 can be used for own needs DWORD nResult = 0; @@ -58,7 +71,7 @@ DWORD InsertAdviseLinkToList( const ComSmart<OleWrapperAdviseSink>& pOwnAdvise, { for ( DWORD nInd = 1; nInd < DEFAULT_ARRAY_LEN && nResult == 0; nInd++ ) { - if ( pAdvises[nInd] == pOwnAdvise ) + if ( pAdvises[nInd].get() == pOwnAdvise.get() ) { nResult = nInd; } @@ -90,9 +103,8 @@ BOOL InprocEmbedDocument_Impl::CheckDefHandler() { // deregister all the listeners - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); - if ( SUCCEEDED( hr ) && pOleObject ) + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); + if ( pOleObject ) { for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ ) if ( m_pOleAdvises[nInd] ) @@ -105,9 +117,8 @@ BOOL InprocEmbedDocument_Impl::CheckDefHandler() pOleObject->SetClientSite( nullptr ); } - ComSmart< IDataObject > pIDataObject; - hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); - if ( SUCCEEDED( hr ) && pIDataObject ) + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); + if ( pIDataObject ) { for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ ) if ( m_pDataAdvises[nInd] ) @@ -118,17 +129,15 @@ BOOL InprocEmbedDocument_Impl::CheckDefHandler() } } - ComSmart< IViewObject > pIViewObject; - hr = m_pDefHandler->QueryInterface( IID_IViewObject, reinterpret_cast<void**>(&pIViewObject) ); - if ( SUCCEEDED( hr ) && pIViewObject ) + sal::systools::COMReference< IViewObject > pIViewObject(m_pDefHandler, sal::systools::COM_QUERY); + if ( pIViewObject ) { if ( m_pViewAdvise ) pIViewObject->SetAdvise( m_pViewAdvise->GetAspect(), m_pViewAdvise->GetViewAdviseFlag(), nullptr ); } - ComSmart< IPersistStorage > pPersist; - hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, reinterpret_cast<void**>(&pPersist) ); - if ( SUCCEEDED( hr ) && pPersist ) + sal::systools::COMReference< IPersistStorage > pPersist(m_pDefHandler, sal::systools::COM_QUERY); + if ( pPersist ) { // disconnect the old wrapper from the storage pPersist->HandsOffStorage(); @@ -152,29 +161,26 @@ BOOL InprocEmbedDocument_Impl::CheckDefHandler() { if ( m_nInitMode == INIT_FROM_STORAGE ) { - ComSmart< IPersistStorage > pPersist; - hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistStorage > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist && m_pStorage ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist && m_pStorage ) hr = pPersist->InitNew( m_pStorage.get() ); } else if ( m_nInitMode == LOAD_FROM_STORAGE ) { - ComSmart< IPersistStorage > pPersist; - hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistStorage > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist && m_pStorage ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist && m_pStorage ) hr = pPersist->Load( m_pStorage.get() ); } else if ( m_nInitMode == LOAD_FROM_FILE ) { - ComSmart< IPersistFile > pPersistFile; - hr = m_pDefHandler->QueryInterface( IID_IPersistFile, reinterpret_cast<void**>(&pPersistFile) ); + sal::systools::COMReference< IPersistFile > pPersistFile(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersistFile && m_pFileName ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersistFile && m_pFileName ) hr = pPersistFile->Load( m_pFileName, m_nFileOpenMode ); } } @@ -187,9 +193,8 @@ BOOL InprocEmbedDocument_Impl::CheckDefHandler() // register all the listeners new - ComSmart< IOleObject > pOleObject; - hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); - if ( SUCCEEDED( hr ) && pOleObject ) + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); + if ( pOleObject ) { if ( m_pClientSite ) pOleObject->SetClientSite( m_pClientSite.get() ); @@ -203,9 +208,8 @@ BOOL InprocEmbedDocument_Impl::CheckDefHandler() } } - ComSmart< IDataObject > pIDataObject; - hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); - if ( SUCCEEDED( hr ) && pIDataObject ) + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); + if ( pIDataObject ) { for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ ) if ( m_pDataAdvises[nInd] ) @@ -216,9 +220,8 @@ BOOL InprocEmbedDocument_Impl::CheckDefHandler() } } - ComSmart< IViewObject > pIViewObject; - hr = m_pDefHandler->QueryInterface( IID_IViewObject, reinterpret_cast<void**>(&pIViewObject) ); - if ( SUCCEEDED( hr ) && pIViewObject ) + sal::systools::COMReference< IViewObject > pIViewObject(m_pDefHandler, sal::systools::COM_QUERY); + if ( pIViewObject ) { if ( m_pViewAdvise ) pIViewObject->SetAdvise( m_pViewAdvise->GetAspect(), m_pViewAdvise->GetViewAdviseFlag(), m_pViewAdvise.get() ); @@ -236,17 +239,8 @@ void InprocEmbedDocument_Impl::Clean() // no DisconnectOrigAdvise() call here, since it is no explicit disconnection for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ ) { - if ( m_pOleAdvises[nInd] ) - { - ComSmart< OleWrapperAdviseSink > pAdvise = m_pOleAdvises[nInd]; - m_pOleAdvises[nInd] = nullptr; - } - - if ( m_pDataAdvises[nInd] ) - { - ComSmart< OleWrapperAdviseSink > pAdvise = m_pDataAdvises[nInd]; - m_pDataAdvises[nInd] = nullptr; - } + m_pOleAdvises[nInd].clear(); + m_pDataAdvises[nInd].clear(); } m_pViewAdvise = nullptr; @@ -272,7 +266,7 @@ void InprocEmbedDocument_Impl::Clean() // IUnknown -COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::QueryInterface( REFIID riid, void FAR* FAR* ppv ) +COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::QueryInterface(REFIID riid, void** ppv) { if(IsEqualIID(riid, IID_IUnknown)) { @@ -402,11 +396,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::IsDirty() if ( CheckDefHandler() ) { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistStorage > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist ) return pPersist->IsDirty(); } @@ -418,13 +411,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InitNew( IStorage *p { if ( CheckDefHandler() ) { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistStorage > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist ) { - hr = pPersist->InitNew( pStg ); + HRESULT hr = pPersist->InitNew( pStg ); if ( SUCCEEDED( hr ) ) { m_nInitMode = INIT_FROM_STORAGE; @@ -450,13 +442,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Load( IStorage *pStg { if ( CheckDefHandler() ) { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistStorage > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist ) { - hr = pPersist->Load( pStg ); + HRESULT hr = pPersist->Load( pStg ); if ( SUCCEEDED( hr ) ) { m_nInitMode = LOAD_FROM_STORAGE; @@ -485,11 +476,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Save( IStorage *pStg if ( CheckDefHandler() ) { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistStorage > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist ) return pPersist->Save( pStgSave, fSameAsLoad ); } @@ -509,13 +499,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SaveCompleted( IStor if ( CheckDefHandler() ) { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistStorage > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist ) { - hr = pPersist->SaveCompleted( pStgNew ); + HRESULT hr = pPersist->SaveCompleted( pStgNew ); if ( SUCCEEDED( hr ) ) { m_nInitMode = LOAD_FROM_STORAGE; @@ -544,13 +533,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::HandsOffStorage() { if ( CheckDefHandler() ) { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistStorage > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist ) { - hr = pPersist->HandsOffStorage(); + HRESULT hr = pPersist->HandsOffStorage(); if ( SUCCEEDED( hr ) ) { m_pStorage = nullptr; @@ -569,13 +557,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Load( LPCOLESTR pszF { if ( CheckDefHandler() && pszFileName ) { - ComSmart< IPersistFile > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistFile > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist ) { - hr = pPersist->Load( pszFileName, dwMode ); + HRESULT hr = pPersist->Load( pszFileName, dwMode ); if ( SUCCEEDED( hr ) ) { m_nInitMode = LOAD_FROM_FILE; @@ -599,11 +586,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Save( LPCOLESTR pszF { if ( CheckDefHandler() ) { - ComSmart< IPersistFile > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistFile > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist ) return pPersist->Save( pszFileName, fRemember ); } @@ -615,13 +601,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SaveCompleted( LPCOL { if ( CheckDefHandler() ) { - ComSmart< IPersistFile > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistFile > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist ) { - hr = pPersist->SaveCompleted( pszFileName ); + HRESULT hr = pPersist->SaveCompleted( pszFileName ); if ( SUCCEEDED( hr ) ) { m_nInitMode = LOAD_FROM_STORAGE; @@ -644,11 +629,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetCurFile( LPOLESTR { if ( CheckDefHandler() ) { - ComSmart< IPersistFile > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, reinterpret_cast<void**>(&pPersist) ); + sal::systools::COMReference< IPersistFile > pPersist(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pPersist ) return pPersist->GetCurFile( ppszFileName ); } @@ -674,11 +658,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SetClientSite( IOleC if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) { HRESULT hr2 = pOleObject->SetClientSite( pSite ); if ( SUCCEEDED( hr2 ) ) @@ -708,11 +691,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetClientSite( IOleC { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->GetClientSite( pSite ); } @@ -725,13 +707,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SetHostNames( LPCOLE if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) { - hr = pOleObject->SetHostNames( szContainerApp, szContainerObj ); + pOleObject->SetHostNames( szContainerApp, szContainerObj ); } } @@ -745,13 +726,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Close( DWORD dwSaveO if ( m_pDefHandler && CheckDefHandler() ) { // no need to close if there is no default handler. - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) { - hr = pOleObject->Close( dwSaveOption ); + HRESULT hr = pOleObject->Close( dwSaveOption ); if (!SUCCEEDED(hr)) ret = hr; hr = CoDisconnectObject( static_cast<IUnknown*>(static_cast<IPersistStorage*>(this)), 0 ); @@ -771,11 +751,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SetMoniker( DWORD dw { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->SetMoniker( dwWhichMoniker, pmk ); } @@ -787,11 +766,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetMoniker( DWORD dw { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->GetMoniker( dwAssign, dwWhichMoniker, ppmk ); } @@ -803,11 +781,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InitFromData( IDataO { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->InitFromData( pDataObject, fCreation, dwReserved ); } @@ -819,11 +796,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetClipboardData( DW { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->GetClipboardData( dwReserved, ppDataObject ); } @@ -841,14 +817,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::DoVerb( { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) { - hr = pOleObject->DoVerb( iVerb, pMsg, pActiveSite, nLong, hWin, pRect ); - return hr; + return pOleObject->DoVerb( iVerb, pMsg, pActiveSite, nLong, hWin, pRect ); } } @@ -861,11 +835,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::EnumVerbs( IEnumOLEV { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->EnumVerbs( ppEnumOleVerb ); } @@ -878,11 +851,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Update() if ( m_pDefHandler && CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->Update(); } @@ -894,11 +866,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::IsUpToDate() { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->IsUpToDate(); } @@ -919,11 +890,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetUserType( DWORD d { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->GetUserType( dwFormOfType, pszUserType ); } @@ -935,11 +905,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SetExtent( DWORD dwD { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->SetExtent( dwDrawAspect, psizel ); } @@ -951,11 +920,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetExtent( DWORD dwD { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->GetExtent( dwDrawAspect, psizel ); } @@ -978,14 +946,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Advise( IAdviseSink if ( pAdvSink && CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) { - ComSmart<IAdviseSink> aListener(pAdvSink); - ComSmart<OleWrapperAdviseSink> pOwnAdvise(new OleWrapperAdviseSink(aListener)); + sal::systools::COMReference pOwnAdvise(new OleWrapperAdviseSink(pAdvSink)); DWORD nRegID = 0; if ( SUCCEEDED( pOleObject->Advise( pOwnAdvise.get(), &nRegID ) ) && nRegID > 0 ) @@ -1011,11 +977,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Unadvise( DWORD dwCo { if ( m_pDefHandler ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) { DWORD nID = m_pOleAdvises[dwConnection]->GetRegID(); pOleObject->Unadvise( nID ); @@ -1042,11 +1007,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetMiscStatus( DWORD { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->GetMiscStatus( dwAspect, pdwStatus ); } @@ -1058,11 +1022,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SetColorScheme( LOGP { if ( CheckDefHandler() ) { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, reinterpret_cast<void**>(&pOleObject) ); + sal::systools::COMReference< IOleObject > pOleObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pOleObject ) return pOleObject->SetColorScheme( pLogpal ); } @@ -1075,11 +1038,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetData( FORMATETC * { if ( CheckDefHandler() ) { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDataObject ) return pIDataObject->GetData( pFormatetc, pMedium ); } @@ -1091,11 +1053,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetDataHere( FORMATE { if ( CheckDefHandler() ) { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDataObject ) return pIDataObject->GetDataHere( pFormatetc, pMedium ); } @@ -1107,11 +1068,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::QueryGetData( FORMAT { if ( CheckDefHandler() ) { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDataObject ) return pIDataObject->QueryGetData( pFormatetc ); } @@ -1123,11 +1083,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetCanonicalFormatEt { if ( CheckDefHandler() ) { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDataObject ) return pIDataObject->GetCanonicalFormatEtc( pFormatetcIn, pFormatetcOut ); } @@ -1139,11 +1098,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SetData( FORMATETC * { if ( CheckDefHandler() ) { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDataObject ) return pIDataObject->SetData( pFormatetc, pMedium, fRelease ); } @@ -1155,11 +1113,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::EnumFormatEtc( DWORD { if ( CheckDefHandler() ) { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDataObject ) return pIDataObject->EnumFormatEtc( dwDirection, ppFormatetc ); } @@ -1182,13 +1139,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::DAdvise( FORMATETC * if ( pAdvSink && CheckDefHandler() ) { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDataObject ) { - ComSmart< OleWrapperAdviseSink > pOwnAdvise( new OleWrapperAdviseSink( ComSmart<IAdviseSink>( pAdvSink ), pFormatetc, advf ) ); + sal::systools::COMReference pOwnAdvise( new OleWrapperAdviseSink( pAdvSink, pFormatetc, advf ) ); DWORD nRegID = 0; if ( SUCCEEDED( pIDataObject->DAdvise( pFormatetc, advf, pOwnAdvise.get(), &nRegID ) ) && nRegID > 0 ) @@ -1214,11 +1170,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::DUnadvise( DWORD dwC { if ( CheckDefHandler() ) { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDataObject ) { DWORD nID = m_pDataAdvises[dwConnection]->GetRegID(); pIDataObject->DUnadvise( nID ); @@ -1239,11 +1194,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::EnumDAdvise( IEnumST { if ( CheckDefHandler() ) { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, reinterpret_cast<void**>(&pIDataObject) ); + sal::systools::COMReference< IDataObject > pIDataObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDataObject ) return pIDataObject->EnumDAdvise( ppenumAdvise ); } @@ -1256,11 +1210,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetRunningClass( LPC { if ( CheckDefHandler() ) { - ComSmart< IRunnableObject > pIRunObj; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, reinterpret_cast<void**>(&pIRunObj) ); + sal::systools::COMReference< IRunnableObject > pIRunObj(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIRunObj ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIRunObj ) return pIRunObj->GetRunningClass( lpClsid ); } @@ -1272,11 +1225,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Run( LPBINDCTX pbc ) { if ( CheckDefHandler() ) { - ComSmart< IRunnableObject > pIRunObj; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, reinterpret_cast<void**>(&pIRunObj) ); + sal::systools::COMReference< IRunnableObject > pIRunObj(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIRunObj ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIRunObj ) return pIRunObj->Run( pbc ); } @@ -1287,11 +1239,10 @@ BOOL STDMETHODCALLTYPE InprocEmbedDocument_Impl::IsRunning() { if (CheckDefHandler()) { - ComSmart< IRunnableObject > pIRunObj; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, reinterpret_cast<void**>(&pIRunObj) ); + sal::systools::COMReference< IRunnableObject > pIRunObj(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIRunObj ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIRunObj ) return pIRunObj->IsRunning(); } @@ -1302,11 +1253,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::LockRunning( BOOL fL { if ( CheckDefHandler() ) { - ComSmart< IRunnableObject > pIRunObj; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, reinterpret_cast<void**>(&pIRunObj) ); + sal::systools::COMReference< IRunnableObject > pIRunObj(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIRunObj ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIRunObj ) return pIRunObj->LockRunning( fLock, fLastUnlockCloses ); } @@ -1318,11 +1268,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SetContainedObject( { if ( CheckDefHandler() ) { - ComSmart< IRunnableObject > pIRunObj; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, reinterpret_cast<void**>(&pIRunObj) ); + sal::systools::COMReference< IRunnableObject > pIRunObj(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIRunObj ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIRunObj ) return pIRunObj->SetContainedObject( fContained ); } @@ -1336,11 +1285,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Draw( DWORD dwDrawAs { if ( CheckDefHandler() ) { - ComSmart< IViewObject > pIViewObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, reinterpret_cast<void**>(&pIViewObject) ); + sal::systools::COMReference< IViewObject > pIViewObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIViewObject ) return pIViewObject->Draw( dwDrawAspect, lindex, pvAspect, ptd, hdcTargetDev, hdcDraw, lprcBounds, lprcWBounds, pfnContinue, dwContinue ); } @@ -1352,11 +1300,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetColorSet( DWORD d { if ( CheckDefHandler() ) { - ComSmart< IViewObject > pIViewObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, reinterpret_cast<void**>(&pIViewObject) ); + sal::systools::COMReference< IViewObject > pIViewObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIViewObject ) return pIViewObject->GetColorSet( dwDrawAspect, lindex, pvAspect, ptd, hicTargetDev, ppColorSet ); } @@ -1368,11 +1315,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Freeze( DWORD dwDraw { if ( CheckDefHandler() ) { - ComSmart< IViewObject > pIViewObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, reinterpret_cast<void**>(&pIViewObject) ); + sal::systools::COMReference< IViewObject > pIViewObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIViewObject ) return pIViewObject->Freeze( dwDrawAspect, lindex, pvAspect, pdwFreeze ); } @@ -1384,11 +1330,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Unfreeze( DWORD dwFr { if ( CheckDefHandler() ) { - ComSmart< IViewObject > pIViewObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, reinterpret_cast<void**>(&pIViewObject) ); + sal::systools::COMReference< IViewObject > pIViewObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIViewObject ) return pIViewObject->Unfreeze( dwFreeze ); } @@ -1408,14 +1353,12 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SetAdvise( DWORD asp if ( pAdvSink && CheckDefHandler() ) { - ComSmart< IViewObject > pIViewObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, reinterpret_cast<void**>(&pIViewObject) ); + sal::systools::COMReference< IViewObject > pIViewObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIViewObject ) { - ComSmart<IAdviseSink> aListener(pAdvSink); - ComSmart<OleWrapperAdviseSink> pOwnAdvise(new OleWrapperAdviseSink(aListener, aspects, advf)); + sal::systools::COMReference pOwnAdvise(new OleWrapperAdviseSink(pAdvSink, aspects, advf)); if ( SUCCEEDED( pIViewObject->SetAdvise( aspects, advf, pOwnAdvise.get() ) ) ) { @@ -1458,11 +1401,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetExtent( DWORD dwD { if ( CheckDefHandler() ) { - ComSmart< IViewObject2 > pIViewObject2; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject2, reinterpret_cast<void**>(&pIViewObject2) ); + sal::systools::COMReference< IViewObject2 > pIViewObject2(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject2 ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIViewObject2 ) return pIViewObject2->GetExtent( dwDrawAspect, lindex, ptd, lpsizel ); } @@ -1476,11 +1418,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetWindow( HWND *phw { if ( CheckDefHandler() ) { - ComSmart< IOleWindow > pIOleWindow; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleWindow, reinterpret_cast<void**>(&pIOleWindow) ); + sal::systools::COMReference< IOleWindow > pIOleWindow(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleWindow ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleWindow ) return pIOleWindow->GetWindow( phwnd ); } @@ -1492,11 +1433,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::ContextSensitiveHelp { if ( CheckDefHandler() ) { - ComSmart< IOleWindow > pIOleWindow; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleWindow, reinterpret_cast<void**>(&pIOleWindow) ); + sal::systools::COMReference< IOleWindow > pIOleWindow(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleWindow ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleWindow ) return pIOleWindow->ContextSensitiveHelp( fEnterMode ); } @@ -1510,11 +1450,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InPlaceDeactivate() { if ( CheckDefHandler() ) { - ComSmart< IOleInPlaceObject > pIOleInPlaceObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, reinterpret_cast<void**>(&pIOleInPlaceObject) ); + sal::systools::COMReference< IOleInPlaceObject > pIOleInPlaceObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleInPlaceObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleInPlaceObject ) return pIOleInPlaceObject->InPlaceDeactivate(); } @@ -1526,11 +1465,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::UIDeactivate() { if ( CheckDefHandler() ) { - ComSmart< IOleInPlaceObject > pIOleInPlaceObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, reinterpret_cast<void**>(&pIOleInPlaceObject) ); + sal::systools::COMReference< IOleInPlaceObject > pIOleInPlaceObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleInPlaceObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleInPlaceObject ) return pIOleInPlaceObject->UIDeactivate(); } @@ -1542,11 +1480,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::SetObjectRects( LPCR { if ( CheckDefHandler() ) { - ComSmart< IOleInPlaceObject > pIOleInPlaceObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, reinterpret_cast<void**>(&pIOleInPlaceObject) ); + sal::systools::COMReference< IOleInPlaceObject > pIOleInPlaceObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleInPlaceObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleInPlaceObject ) return pIOleInPlaceObject->SetObjectRects( lprcPosRect, lprcClipRect ); } @@ -1558,11 +1495,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::ReactivateAndUndo() { if ( CheckDefHandler() ) { - ComSmart< IOleInPlaceObject > pIOleInPlaceObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, reinterpret_cast<void**>(&pIOleInPlaceObject) ); + sal::systools::COMReference< IOleInPlaceObject > pIOleInPlaceObject(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleInPlaceObject ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleInPlaceObject ) return pIOleInPlaceObject->ReactivateAndUndo(); } @@ -1576,11 +1512,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetTypeInfoCount( UI { if ( CheckDefHandler() ) { - ComSmart< IDispatch > pIDispatch; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, reinterpret_cast<void**>(&pIDispatch) ); + sal::systools::COMReference< IDispatch > pIDispatch(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDispatch ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDispatch ) return pIDispatch->GetTypeInfoCount( pctinfo ); } @@ -1592,11 +1527,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetTypeInfo( UINT iT { if ( CheckDefHandler() ) { - ComSmart< IDispatch > pIDispatch; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, reinterpret_cast<void**>(&pIDispatch) ); + sal::systools::COMReference< IDispatch > pIDispatch(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDispatch ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDispatch ) return pIDispatch->GetTypeInfo( iTInfo, lcid, ppTInfo ); } @@ -1608,11 +1542,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::GetIDsOfNames( REFII { if ( CheckDefHandler() ) { - ComSmart< IDispatch > pIDispatch; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, reinterpret_cast<void**>(&pIDispatch) ); + sal::systools::COMReference< IDispatch > pIDispatch(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDispatch ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDispatch ) return pIDispatch->GetIDsOfNames( riid, rgszNames, cNames, lcid, rgDispId ); } @@ -1624,11 +1557,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Invoke( DISPID dispI { if ( CheckDefHandler() ) { - ComSmart< IDispatch > pIDispatch; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, reinterpret_cast<void**>(&pIDispatch) ); + sal::systools::COMReference< IDispatch > pIDispatch(m_pDefHandler, sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDispatch ) + ULONGGuard aGuard( m_nCallsOnStack ); // avoid reentrance problem + if ( pIDispatch ) return pIDispatch->Invoke( dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr ); } @@ -1641,7 +1573,8 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::Invoke( DISPID dispI // IUnknown -COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::QueryInterface( REFIID riid, void FAR* FAR* ppv ) +COM_DECLSPEC_NOTHROW STDMETHODIMP +InprocEmbedDocument_Impl::InternalCacheWrapper::QueryInterface(REFIID riid, void** ppv) { return m_rOwnDocument.QueryInterface( riid, ppv ); } @@ -1664,11 +1597,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper { if ( m_rOwnDocument.CheckDefHandler() ) { - ComSmart< IOleCache > pIOleCache; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, reinterpret_cast<void**>(&pIOleCache) ); + sal::systools::COMReference< IOleCache > pIOleCache(m_rOwnDocument.GetDefHandler(), sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache ) + ULONGGuard aGuard( m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleCache ) return pIOleCache->Cache( pformatetc, advf, pdwConnection ); } @@ -1680,11 +1612,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper { if ( m_rOwnDocument.CheckDefHandler() ) { - ComSmart< IOleCache > pIOleCache; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, reinterpret_cast<void**>(&pIOleCache) ); + sal::systools::COMReference< IOleCache > pIOleCache(m_rOwnDocument.GetDefHandler(), sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache ) + ULONGGuard aGuard( m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleCache ) return pIOleCache->Uncache( dwConnection ); } @@ -1696,11 +1627,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper { if ( m_rOwnDocument.CheckDefHandler() ) { - ComSmart< IOleCache > pIOleCache; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, reinterpret_cast<void**>(&pIOleCache) ); + sal::systools::COMReference< IOleCache > pIOleCache(m_rOwnDocument.GetDefHandler(), sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache ) + ULONGGuard aGuard( m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleCache ) return pIOleCache->EnumCache( ppenumSTATDATA ); } @@ -1712,11 +1642,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper { if ( m_rOwnDocument.CheckDefHandler() ) { - ComSmart< IOleCache > pIOleCache; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, reinterpret_cast<void**>(&pIOleCache) ); + sal::systools::COMReference< IOleCache > pIOleCache(m_rOwnDocument.GetDefHandler(), sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache ) + ULONGGuard aGuard( m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleCache ) return pIOleCache->InitCache( pDataObject ); } @@ -1728,11 +1657,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper { if ( m_rOwnDocument.CheckDefHandler() ) { - ComSmart< IOleCache > pIOleCache; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, reinterpret_cast<void**>(&pIOleCache) ); + sal::systools::COMReference< IOleCache > pIOleCache(m_rOwnDocument.GetDefHandler(), sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache ) + ULONGGuard aGuard( m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleCache ) return pIOleCache->SetData( pformatetc, pmedium, fRelease ); } @@ -1745,11 +1673,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper { if ( m_rOwnDocument.CheckDefHandler() ) { - ComSmart< IOleCache2 > pIOleCache2; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache2, reinterpret_cast<void**>(&pIOleCache2) ); + sal::systools::COMReference< IOleCache2 > pIOleCache2(m_rOwnDocument.GetDefHandler(), sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache2 ) + ULONGGuard aGuard( m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleCache2 ) return pIOleCache2->UpdateCache( pDataObject, grfUpdf, pReserved ); } @@ -1761,11 +1688,10 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper { if ( m_rOwnDocument.CheckDefHandler() ) { - ComSmart< IOleCache2 > pIOleCache2; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache2, reinterpret_cast<void**>(&pIOleCache2) ); + sal::systools::COMReference< IOleCache2 > pIOleCache2(m_rOwnDocument.GetDefHandler(), sal::systools::COM_QUERY); - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache2 ) + ULONGGuard aGuard( m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem + if ( pIOleCache2 ) return pIOleCache2->DiscardCache( dwDiscardOptions ); } diff --git a/embedserv/source/inprocserv/inprocembobj.h b/embedserv/source/inprocserv/inprocembobj.h index 8b0b8bd89e92..8591a56c3e87 100644 --- a/embedserv/source/inprocserv/inprocembobj.h +++ b/embedserv/source/inprocserv/inprocembobj.h @@ -26,7 +26,7 @@ #include <windows.h> #include <oleidl.h> -#include "smartpointer.hxx" +#include <systools/win32/comtools.hxx> #include "advisesink.hxx" #define DEFAULT_ARRAY_LEN 256 @@ -69,24 +69,24 @@ class InprocEmbedDocument_Impl : public InprocCountedObject_Impl GUID m_guid; - ComSmart< IUnknown > m_pDefHandler; + sal::systools::COMReference< IUnknown > m_pDefHandler; InitModes m_nInitMode; DWORD m_nFileOpenMode; wchar_t* m_pFileName; - ComSmart< IStorage > m_pStorage; + sal::systools::COMReference< IStorage > m_pStorage; - ComSmart< IOleClientSite > m_pClientSite; - ComSmart< IOleContainer > m_pOleContainer; + sal::systools::COMReference< IOleClientSite > m_pClientSite; + sal::systools::COMReference< IOleContainer > m_pOleContainer; ULONG m_nCallsOnStack; // the listeners have wrappers that are directly connected to the object and call the listeners, // the wrappers will be reconnected correctly to the new default inprocess holder object - ComSmart< OleWrapperAdviseSink > m_pOleAdvises[DEFAULT_ARRAY_LEN]; - ComSmart< OleWrapperAdviseSink > m_pDataAdvises[DEFAULT_ARRAY_LEN]; - ComSmart< OleWrapperAdviseSink > m_pViewAdvise; + sal::systools::COMReference< OleWrapperAdviseSink > m_pOleAdvises[DEFAULT_ARRAY_LEN]; + sal::systools::COMReference< OleWrapperAdviseSink > m_pDataAdvises[DEFAULT_ARRAY_LEN]; + sal::systools::COMReference< OleWrapperAdviseSink > m_pViewAdvise; class InternalCacheWrapper final: public IOleCache2 { @@ -134,7 +134,7 @@ public: {} BOOL CheckDefHandler(); - ComSmart< IUnknown >& GetDefHandler() { return m_pDefHandler; } + sal::systools::COMReference< IUnknown >& GetDefHandler() { return m_pDefHandler; } /* IUnknown methods */ STDMETHOD(QueryInterface)(REFIID riid, void ** ppvObj) override; diff --git a/embedserv/source/inprocserv/smartpointer.hxx b/embedserv/source/inprocserv/smartpointer.hxx deleted file mode 100644 index 5e1606cad725..000000000000 --- a/embedserv/source/inprocserv/smartpointer.hxx +++ /dev/null @@ -1,184 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_EMBEDSERV_SOURCE_INPROCSERV_SMARTPOINTER_HXX -#define INCLUDED_EMBEDSERV_SOURCE_INPROCSERV_SMARTPOINTER_HXX - -namespace inprocserv{ - -void WriteDebugInfo( DWORD pThis, char* pString, DWORD nToWrite ); - -template< class T > class ComSmart -{ - T* m_pInterface; - - void OwnRelease() - { - if ( m_pInterface ) - { - T* pInterface = m_pInterface; - m_pInterface = nullptr; - pInterface->Release(); - } - } - -public: - ComSmart() - : m_pInterface( nullptr ) - {} - - ComSmart( const ComSmart<T>& rObj ) - : m_pInterface( rObj.m_pInterface ) - { - if ( m_pInterface != nullptr ) - m_pInterface->AddRef(); - } - - explicit ComSmart( T* pInterface ) - : m_pInterface( pInterface ) - { - if ( m_pInterface != nullptr ) - m_pInterface->AddRef(); - } - - ~ComSmart() - { - OwnRelease(); - } - - ComSmart& operator=( const ComSmart<T>& rObj ) - { - if(this == &rObj) - return *this; - - OwnRelease(); - - m_pInterface = rObj.m_pInterface; - - if ( m_pInterface != nullptr ) - m_pInterface->AddRef(); - - return *this; - } - - ComSmart<T>& operator=( T* pInterface ) - { - OwnRelease(); - - m_pInterface = pInterface; - - if ( m_pInterface != nullptr ) - m_pInterface->AddRef(); - - return *this; - } - - explicit operator bool() const - { - return m_pInterface != nullptr; - } - - T* get() const - { - return m_pInterface; - } - - T& operator*() const - { - return *m_pInterface; - } - - T** operator&() - { - OwnRelease(); - - m_pInterface = nullptr; - - return &m_pInterface; - } - - T* operator->() const - { - return m_pInterface; - } - - BOOL operator==( const ComSmart<T>& rObj ) const - { - return ( m_pInterface == rObj.m_pInterface ); - } - - BOOL operator!=( const ComSmart<T>& rObj ) const - { - return ( m_pInterface != rObj.m_pInterface ); - } - - bool operator==( const T* pInterface ) const - { - return ( m_pInterface == pInterface ); - } - - BOOL operator!=( const T* pInterface ) const - { - return ( m_pInterface != pInterface ); - } -}; - -class CSGuard -{ - CRITICAL_SECTION* m_pCriticalSection; - -public: - explicit CSGuard( CRITICAL_SECTION* pCS ) - : m_pCriticalSection( pCS ) - { - if ( m_pCriticalSection ) - EnterCriticalSection( m_pCriticalSection ); - } - - ~CSGuard() - { - if ( m_pCriticalSection ) - LeaveCriticalSection( m_pCriticalSection ); - } -}; - -class ULONGGuard -{ - ULONG* m_pValue; - -public: - explicit ULONGGuard( ULONG* pValue ) - : m_pValue( pValue ) - { - if ( m_pValue ) - (*m_pValue)++; - } - - ~ULONGGuard() - { - if ( m_pValue ) - (*m_pValue)--; - } -}; - -} // namespace inprocserv - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |