diff options
Diffstat (limited to 'embedserv/source/inprocserv')
-rw-r--r-- | embedserv/source/inprocserv/advisesink.cxx | 184 | ||||
-rw-r--r-- | embedserv/source/inprocserv/advisesink.hxx | 97 | ||||
-rw-r--r-- | embedserv/source/inprocserv/dllentry.cxx | 351 | ||||
-rw-r--r-- | embedserv/source/inprocserv/exports.dxp | 5 | ||||
-rw-r--r-- | embedserv/source/inprocserv/inprocembobj.cxx | 1816 | ||||
-rw-r--r-- | embedserv/source/inprocserv/inprocembobj.h | 244 | ||||
-rw-r--r-- | embedserv/source/inprocserv/makefile.mk | 80 | ||||
-rw-r--r-- | embedserv/source/inprocserv/smartpointer.hxx | 185 |
8 files changed, 0 insertions, 2962 deletions
diff --git a/embedserv/source/inprocserv/advisesink.cxx b/embedserv/source/inprocserv/advisesink.cxx deleted file mode 100644 index 09b24e2c0..000000000 --- a/embedserv/source/inprocserv/advisesink.cxx +++ /dev/null @@ -1,184 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#pragma warning(disable : 4668) - -#include <advisesink.hxx> - -namespace inprocserv -{ - -OleWrapperAdviseSink::OleWrapperAdviseSink() -: m_nRefCount( 0 ) -, m_pFormatEtc( NULL ) -, m_nAspect( DVASPECT_CONTENT ) -, m_nRegID( 0 ) -, m_bObjectAdvise( TRUE ) -, m_nDataRegFlag( 0 ) -, m_nViewRegFlag( 0 ) -, m_bHandleClosed( TRUE ) -, m_bClosed( FALSE ) -{ -} - -OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener ) -: m_nRefCount( 0 ) -, m_pListener( pListener ) -, m_pFormatEtc( NULL ) -, m_nAspect( DVASPECT_CONTENT ) -, m_nRegID( 0 ) -, m_bObjectAdvise( TRUE ) -, m_nDataRegFlag( 0 ) -, m_nViewRegFlag( 0 ) -, m_bHandleClosed( FALSE ) -, m_bClosed( FALSE ) -{ -} - -OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener, FORMATETC* pFormatEtc, DWORD nDataRegFlag ) -: m_nRefCount( 0 ) -, m_pListener( pListener ) -, m_pFormatEtc( NULL ) -, m_nAspect( DVASPECT_CONTENT ) -, m_nRegID( 0 ) -, m_bObjectAdvise( FALSE ) -, m_nDataRegFlag( nDataRegFlag ) -, m_nViewRegFlag( 0 ) -, m_bHandleClosed( FALSE ) -, m_bClosed( FALSE ) -{ - if ( pFormatEtc ) - { - m_pFormatEtc = new FORMATETC; - m_pFormatEtc->cfFormat = pFormatEtc->cfFormat; - m_pFormatEtc->ptd = NULL; - m_pFormatEtc->dwAspect = pFormatEtc->dwAspect; - m_pFormatEtc->lindex = pFormatEtc->lindex; - m_pFormatEtc->tymed = pFormatEtc->tymed; - } -} - -OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener, DWORD nAspect, DWORD nViewRegFlag ) -: m_nRefCount( 0 ) -, m_pListener( pListener ) -, m_pFormatEtc( NULL ) -, m_nAspect( nAspect ) -, m_nRegID( 0 ) -, m_bObjectAdvise( TRUE ) -, m_nDataRegFlag( 0 ) -, m_nViewRegFlag( nViewRegFlag ) -, m_bHandleClosed( FALSE ) -, m_bClosed( FALSE ) -{ -} - -OleWrapperAdviseSink::~OleWrapperAdviseSink() -{ - if ( m_pFormatEtc ) - delete m_pFormatEtc; -} - -STDMETHODIMP OleWrapperAdviseSink::QueryInterface( REFIID riid , void** ppv ) -{ - *ppv=NULL; - - if ( riid == IID_IUnknown ) - *ppv = (IUnknown*)this; - - if ( riid == IID_IAdviseSink ) - *ppv = (IAdviseSink*)this; - - if ( *ppv != NULL ) - { - ((IUnknown*)*ppv)->AddRef(); - return S_OK; - } - - return E_NOINTERFACE; -} - -STDMETHODIMP_(ULONG) OleWrapperAdviseSink::AddRef() -{ - return ++m_nRefCount; -} - -STDMETHODIMP_(ULONG) OleWrapperAdviseSink::Release() -{ - ULONG nReturn = --m_nRefCount; - if ( m_nRefCount == 0 ) - delete this; - - return nReturn; -} - -STDMETHODIMP_(void) OleWrapperAdviseSink::OnDataChange( LPFORMATETC pFetc, LPSTGMEDIUM pMedium ) -{ - if ( m_pListener ) - { - m_pListener->OnDataChange( pFetc, pMedium ); - } -} - -STDMETHODIMP_(void) OleWrapperAdviseSink::OnViewChange( DWORD dwAspect, LONG lindex ) -{ - if ( m_pListener ) - { - m_pListener->OnViewChange( dwAspect, lindex ); - } -} - -STDMETHODIMP_(void) OleWrapperAdviseSink::OnRename( LPMONIKER pMoniker ) -{ - if ( m_pListener ) - { - m_pListener->OnRename( pMoniker ); - } -} - -STDMETHODIMP_(void) OleWrapperAdviseSink::OnSave(void) -{ - if ( m_pListener ) - { - m_pListener->OnSave(); - } -} - -STDMETHODIMP_(void) OleWrapperAdviseSink::OnClose(void) -{ - if ( m_pListener ) - { - m_pListener->OnClose(); - } - - if ( m_bHandleClosed ) - m_bClosed = TRUE; -} - -} // namespace inprocserv - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inprocserv/advisesink.hxx b/embedserv/source/inprocserv/advisesink.hxx deleted file mode 100644 index 22246b1ef..000000000 --- a/embedserv/source/inprocserv/advisesink.hxx +++ /dev/null @@ -1,97 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include <windows.h> -#include "smartpointer.hxx" - -namespace inprocserv { - -class OleWrapperAdviseSink : public IAdviseSink -{ -protected: - ULONG m_nRefCount; - - ComSmart< IAdviseSink > m_pListener; - DWORD m_nListenerID; - - FORMATETC* m_pFormatEtc; - DWORD m_nAspect; - - DWORD m_nRegID; - DWORD m_bObjectAdvise; - DWORD m_nDataRegFlag; - DWORD m_nViewRegFlag; - - BOOL m_bHandleClosed; - BOOL m_bClosed; - -public: - // an AdviseSink for own needs, should be created always - OleWrapperAdviseSink(); - - // an AdviseSink for IOleObject interface - OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener ); - - // an AdviseSink for IDataObject interface - OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener, FORMATETC* pFormatEtc, DWORD nDataRegFlag ); - - // an AdviseSink for IViewObject interface - OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener, DWORD nAspect, DWORD nViewRegFlag ); - - virtual ~OleWrapperAdviseSink(); - - void SetRegID( DWORD nRegID ) { m_nRegID = nRegID; } - DWORD GetRegID() { return m_nRegID; } - - BOOL IsOleAdvise() { return m_bObjectAdvise; } - DWORD GetDataAdviseFlag() { return m_nDataRegFlag; } - DWORD GetViewAdviseFlag() { return m_nViewRegFlag; } - - FORMATETC* GetFormatEtc() { return m_pFormatEtc; } - DWORD GetAspect() { return m_nAspect; } - ComSmart< IAdviseSink >& GetOrigAdvise() { return m_pListener; } - void DisconnectOrigAdvise() { m_pListener = NULL; } - - void SetClosed() { m_bClosed = TRUE; } - void UnsetClosed() { m_bClosed = FALSE; } - BOOL IsClosed() { return m_bClosed; } - - STDMETHODIMP QueryInterface(REFIID, void**); - STDMETHODIMP_(ULONG) AddRef(void); - STDMETHODIMP_(ULONG) Release(void); - - STDMETHODIMP_(void) OnDataChange(LPFORMATETC, LPSTGMEDIUM); - STDMETHODIMP_(void) OnViewChange(DWORD, LONG); - STDMETHODIMP_(void) OnRename(LPMONIKER); - STDMETHODIMP_(void) OnSave(void); - STDMETHODIMP_(void) OnClose(void); -}; - -}; // namespace advisesink - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inprocserv/dllentry.cxx b/embedserv/source/inprocserv/dllentry.cxx deleted file mode 100644 index acb94fd5e..000000000 --- a/embedserv/source/inprocserv/dllentry.cxx +++ /dev/null @@ -1,351 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include <stdio.h> -#include <inprocembobj.h> -#ifdef __MINGW32__ -#define INITGUID -#endif -#include <embservconst.h> - -static const GUID* guidList[ SUPPORTED_FACTORIES_NUM ] = { - &OID_WriterTextServer, - &OID_WriterOASISTextServer, - &OID_CalcServer, - &OID_CalcOASISServer, - &OID_DrawingServer, - &OID_DrawingOASISServer, - &OID_PresentationServer, - &OID_PresentationOASISServer, - &OID_MathServer, - &OID_MathOASISServer -}; - -static HINSTANCE g_hInstance = NULL; -static ULONG g_nObj = 0; -static ULONG g_nLock = 0; - - -namespace { - void FillCharFromInt( int nValue, char* pBuf, int nLen ) - { - int nInd = 0; - while( nInd < nLen ) - { - char nSign = ( nValue / ( 1 << ( ( nLen - nInd ) * 4 ) ) ) % 16; - if ( nSign >= 0 && nSign <= 9 ) - pBuf[nInd] = nSign + '0'; - else if ( nSign >= 10 && nSign <= 15 ) - pBuf[nInd] = nSign - 10 + 'a'; - - nInd++; - } - } - - int GetStringFromClassID( const GUID& guid, char* pBuf, int nLen ) - { - // is not allowed to insert - if ( nLen < 38 ) - return 0; - - pBuf[0] = '{'; - FillCharFromInt( guid.Data1, &pBuf[1], 8 ); - pBuf[9] = '-'; - FillCharFromInt( guid.Data2, &pBuf[10], 4 ); - pBuf[14] = '-'; - FillCharFromInt( guid.Data3, &pBuf[15], 4 ); - pBuf[19] = '-'; - - int nInd = 0; - for ( nInd = 0; nInd < 2 ; nInd++ ) - FillCharFromInt( guid.Data4[nInd], &pBuf[20 + 2*nInd], 2 ); - pBuf[24] = '-'; - for ( nInd = 2; nInd < 8 ; nInd++ ) - FillCharFromInt( guid.Data4[nInd], &pBuf[20 + 1 + 2*nInd], 2 ); - pBuf[37] = '}'; - - return 38; - } - - HRESULT WriteLibraryToRegistry( char* pLibrary, DWORD nLen ) - { - HRESULT hRes = E_FAIL; - if ( pLibrary && nLen ) - { - HKEY hKey = NULL; - - hRes = S_OK; - for ( int nInd = 0; nInd < SUPPORTED_FACTORIES_NUM; nInd++ ) - { - char* pSubKey = "Software\\Classes\\CLSID\\.....................................\\InprocHandler32"; - - int nGuidLen = GetStringFromClassID( *guidList[nInd], &pSubKey[23], 38 ); - - BOOL bLocalSuccess = FALSE; - if ( nGuidLen && nGuidLen == 38 ) - { - if ( ERROR_SUCCESS == RegOpenKey( HKEY_LOCAL_MACHINE, pSubKey, &hKey ) ) - { - if ( ERROR_SUCCESS == RegSetValueEx( hKey, "", 0, REG_SZ, (const BYTE*)pLibrary, nLen ) ) - bLocalSuccess = TRUE; - } - - if ( hKey ) - { - RegCloseKey( hKey ); - hKey = NULL; - } - } - - if ( !bLocalSuccess ) - hRes = E_FAIL; - } - } - - return hRes; - } -}; - -// =========================== -// InprocEmbedProvider_Impl declaration -// =========================== - -namespace inprocserv -{ - -class InprocEmbedProvider_Impl : public IClassFactory, public InprocCountedObject_Impl -{ -public: - - InprocEmbedProvider_Impl( const GUID& guid ); - virtual ~InprocEmbedProvider_Impl(); - - /* IUnknown methods */ - STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR * ppvObj); - STDMETHOD_(ULONG, AddRef)(); - STDMETHOD_(ULONG, Release)(); - - /* IClassFactory methods */ - STDMETHOD(CreateInstance)(IUnknown FAR* punkOuter, REFIID riid, void FAR* FAR* ppv); - STDMETHOD(LockServer)(int fLock); - -protected: - - ULONG m_refCount; - GUID m_guid; -}; -}; // namespace inprocserv - - -// =========================== -// Entry points -// =========================== - -// ------------------------------------------------------------------------------- -extern "C" BOOL WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/ ) -{ - if (dwReason == DLL_PROCESS_ATTACH) - { - g_hInstance = hInstance; - } - else if (dwReason == DLL_PROCESS_DETACH) - { - } - - return TRUE; // ok -} - -// ------------------------------------------------------------------------------- -extern "C" STDAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, LPVOID* ppv ) -{ - for( int nInd = 0; nInd < SUPPORTED_FACTORIES_NUM; nInd++ ) - if ( *guidList[nInd] == rclsid ) - { - if ( !IsEqualIID( riid, IID_IUnknown ) && !IsEqualIID( riid, IID_IClassFactory ) ) - return E_NOINTERFACE; - - *ppv = new inprocserv::InprocEmbedProvider_Impl( rclsid ); - if ( *ppv == NULL ) - return E_OUTOFMEMORY; - - ((LPUNKNOWN)*ppv)->AddRef(); - return S_OK; - } - - return E_FAIL; -} - -// ------------------------------------------------------------------------------- -extern "C" STDAPI DllCanUnloadNow() -{ - if ( !g_nObj && !g_nLock ) - return S_OK; - - return S_FALSE; -} - -// ------------------------------------------------------------------------------- -STDAPI DllRegisterServer( void ) -{ - char aLibPath[1024]; - HMODULE aCurModule = GetModuleHandleA( "inprocserv.dll" ); - if( aCurModule ) - { - DWORD nLen = GetModuleFileNameA( aCurModule, aLibPath, 1019 ); - if ( nLen && nLen < 1019 ) - { - aLibPath[nLen++] = 0; - return WriteLibraryToRegistry( aLibPath, nLen ); - } - } - - return E_FAIL; -} - -// ------------------------------------------------------------------------------- -STDAPI DllUnregisterServer( void ) -{ - return WriteLibraryToRegistry( "ole32.dll", 10 ); -} - -// =========================== -// End of entry points -// =========================== - -namespace inprocserv -{ - -// =========================== -// InprocCountedObject_Impl implementation -// =========================== - -// ------------------------------------------------------------------------------- -InprocCountedObject_Impl::InprocCountedObject_Impl() -{ - g_nObj++; -} - -// ------------------------------------------------------------------------------- -InprocCountedObject_Impl::~InprocCountedObject_Impl() -{ - g_nObj--; -} - -// =========================== -// InprocEmbedProvider_Impl implementation -// =========================== - -// ------------------------------------------------------------------------------- -InprocEmbedProvider_Impl::InprocEmbedProvider_Impl( const GUID& guid ) -: m_refCount( 0 ) -, m_guid( guid ) -{ -} - -// ------------------------------------------------------------------------------- -InprocEmbedProvider_Impl::~InprocEmbedProvider_Impl() -{ -} - -// IUnknown -// ------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedProvider_Impl::QueryInterface( REFIID riid, void FAR* FAR* ppv ) -{ - if(IsEqualIID(riid, IID_IUnknown)) - { - AddRef(); - *ppv = (IUnknown*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IClassFactory)) - { - AddRef(); - *ppv = (IClassFactory*) this; - return S_OK; - } - - *ppv = NULL; - return E_NOINTERFACE; -} - -// ------------------------------------------------------------------------------- -STDMETHODIMP_(ULONG) InprocEmbedProvider_Impl::AddRef() -{ - return ++m_refCount; -} - -// ------------------------------------------------------------------------------- -STDMETHODIMP_(ULONG) InprocEmbedProvider_Impl::Release() -{ - sal_Int32 nCount = --m_refCount; - if ( nCount == 0 ) - delete this; - return nCount; -} - -// ------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedProvider_Impl::CreateInstance(IUnknown FAR* punkOuter, - REFIID riid, - void FAR* FAR* ppv) -{ - // TODO/LATER: should the aggregation be supported? - // if ( punkOuter != NULL && riid != IID_IUnknown ) - // return E_NOINTERFACE; - if ( punkOuter != NULL ) - return CLASS_E_NOAGGREGATION; - - InprocEmbedDocument_Impl* pEmbedDocument = new InprocEmbedDocument_Impl( m_guid ); - if ( !pEmbedDocument ) - return E_OUTOFMEMORY; - - pEmbedDocument->AddRef(); - HRESULT hr = pEmbedDocument->Init(); - if ( SUCCEEDED( hr ) ) - hr = pEmbedDocument->QueryInterface( riid, ppv ); - pEmbedDocument->Release(); - - if ( !SUCCEEDED( hr ) ) - *ppv = NULL; - - return hr; -} - -// ------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedProvider_Impl::LockServer( int fLock ) -{ - if ( fLock ) - g_nLock++; - else - g_nLock--; - - return S_OK; -} - -}; // namespace inprocserv - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inprocserv/exports.dxp b/embedserv/source/inprocserv/exports.dxp deleted file mode 100644 index 65a5126f1..000000000 --- a/embedserv/source/inprocserv/exports.dxp +++ /dev/null @@ -1,5 +0,0 @@ -DllGetClassObject -DllCanUnloadNow -DllMain -DllRegisterServer -DllUnregisterServer diff --git a/embedserv/source/inprocserv/inprocembobj.cxx b/embedserv/source/inprocserv/inprocembobj.cxx deleted file mode 100644 index d984e9994..000000000 --- a/embedserv/source/inprocserv/inprocembobj.cxx +++ /dev/null @@ -1,1816 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include <embservconst.h> -#include "inprocembobj.h" - -namespace inprocserv -{ - -//------------------------------------------------------------------------------- -BOOL StringsEqual( LPCOLESTR pszNameFromOutside, wchar_t* pOwnName ) -{ - BOOL bResult = TRUE; - - if ( pszNameFromOutside && pOwnName ) - { - for ( int nInd = 0; pszNameFromOutside[nInd] != 0 || pOwnName[nInd] != 0; nInd++ ) - { - if ( pszNameFromOutside[nInd] != pOwnName[nInd] ) - { - bResult = FALSE; - break; - } - } - } - else if ( pszNameFromOutside || pOwnName ) - bResult = FALSE; - - return bResult; -} - -//------------------------------------------------------------------------------- -HRESULT InprocEmbedDocument_Impl::Init() -{ - return S_OK; -} - -//------------------------------------------------------------------------------- -void InprocEmbedDocument_Impl::SetName( LPCOLESTR pszNameFromOutside, wchar_t*& pOwnName ) -{ - if ( !pszNameFromOutside ) - return; - - // copy the string - size_t nLen = 0; - while( pszNameFromOutside[nLen] != 0 ) - nLen++; - - if ( pOwnName ) - { - delete[] pOwnName; - pOwnName = NULL; - } - - pOwnName = new wchar_t[nLen+1]; - for ( size_t nInd = 0; nInd < nLen; nInd++ ) - pOwnName[nInd] = pszNameFromOutside[nInd]; - pOwnName[nLen] = 0; -} - -//------------------------------------------------------------------------------- -BOOL InprocEmbedDocument_Impl::CheckDefHandler() -{ - // set the own listener - if ( m_pOleAdvises[0] == NULL ) - { - m_pOleAdvises[0] = new OleWrapperAdviseSink(); - } - else - { - if ( m_pOleAdvises[0]->IsClosed() ) - { - if ( m_pDefHandler ) - { - // deregister all the listeners - - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - if ( SUCCEEDED( hr ) && pOleObject ) - { - for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ ) - if ( m_pOleAdvises[nInd] ) - { - DWORD nID = m_pOleAdvises[nInd]->GetRegID(); - pOleObject->Unadvise( nID ); - m_pOleAdvises[nInd]->SetRegID( 0 ); - } - - pOleObject->SetClientSite( NULL ); - } - - ComSmart< IDataObject > pIDataObject; - hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - if ( SUCCEEDED( hr ) && pIDataObject ) - { - for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ ) - if ( m_pDataAdvises[nInd] ) - { - DWORD nID = m_pDataAdvises[nInd]->GetRegID(); - pIDataObject->DUnadvise( nID ); - m_pDataAdvises[nInd]->SetRegID( 0 ); - } - } - - ComSmart< IViewObject > pIViewObject; - hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject ); - if ( SUCCEEDED( hr ) && pIViewObject ) - { - if ( m_pViewAdvise ) - pIViewObject->SetAdvise( m_pViewAdvise->GetAspect(), m_pViewAdvise->GetViewAdviseFlag(), NULL ); - } - - ComSmart< IPersistStorage > pPersist; - hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist ); - if ( SUCCEEDED( hr ) && pPersist ) - { - // disconnect the old wrapper from the storage - pPersist->HandsOffStorage(); - } - - m_pDefHandler = NULL; - } - - m_pOleAdvises[0]->UnsetClosed(); - } - } - - if ( m_nCallsOnStack ) - return FALSE; - - if ( !m_pDefHandler ) - { - // create a new default inprocess handler - HRESULT hr = OleCreateDefaultHandler( m_guid, NULL, IID_IUnknown, (void**)&m_pDefHandler ); - if ( SUCCEEDED( hr ) ) - { - { - if ( m_nInitMode == INIT_FROM_STORAGE ) - { - ComSmart< IPersistStorage > pPersist; - hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist && m_pStorage ) - hr = pPersist->InitNew( m_pStorage ); - } - else if ( m_nInitMode == LOAD_FROM_STORAGE ) - { - ComSmart< IPersistStorage > pPersist; - hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist && m_pStorage ) - hr = pPersist->Load( m_pStorage ); - } - else if ( m_nInitMode == LOAD_FROM_FILE ) - { - ComSmart< IPersistFile > pPersistFile; - hr = m_pDefHandler->QueryInterface( IID_IPersistFile, (void**)&pPersistFile ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersistFile && m_pFileName ) - hr = pPersistFile->Load( m_pFileName, m_nFileOpenMode ); - } - } - } - - if ( !SUCCEEDED( hr ) || !m_pDefHandler ) - { - m_pDefHandler = NULL; - return FALSE; - } - - // register all the listeners new - - ComSmart< IOleObject > pOleObject; - hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - if ( SUCCEEDED( hr ) && pOleObject ) - { - if ( m_pClientSite ) - pOleObject->SetClientSite( m_pClientSite ); - - for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ ) - if ( m_pOleAdvises[nInd] ) - { - DWORD nRegID = 0; - if ( SUCCEEDED( pOleObject->Advise( m_pOleAdvises[nInd], &nRegID ) ) && nRegID > 0 ) - m_pOleAdvises[nInd]->SetRegID( nRegID ); - } - } - - ComSmart< IDataObject > pIDataObject; - hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - if ( SUCCEEDED( hr ) && pIDataObject ) - { - for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ ) - if ( m_pDataAdvises[nInd] ) - { - DWORD nRegID = 0; - if ( SUCCEEDED( pIDataObject->DAdvise( m_pDataAdvises[nInd]->GetFormatEtc(), m_pDataAdvises[nInd]->GetDataAdviseFlag(), m_pDataAdvises[nInd], &nRegID ) ) && nRegID > 0 ) - m_pDataAdvises[nInd]->SetRegID( nRegID ); - } - } - - ComSmart< IViewObject > pIViewObject; - hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject ); - if ( SUCCEEDED( hr ) && pIViewObject ) - { - if ( m_pViewAdvise ) - pIViewObject->SetAdvise( m_pViewAdvise->GetAspect(), m_pViewAdvise->GetViewAdviseFlag(), m_pViewAdvise ); - } - } - - - return TRUE; -} - -//------------------------------------------------------------------------------- -DWORD InprocEmbedDocument_Impl::InsertAdviseLinkToList( const ComSmart<OleWrapperAdviseSink>& pOwnAdvise, ComSmart< OleWrapperAdviseSink > pAdvises[] ) -{ - // the result should start from 1 in case of success, the element 0 can be used for own needs - DWORD nResult = 0; - - if ( pOwnAdvise ) - { - for ( DWORD nInd = 1; nInd < DEFAULT_ARRAY_LEN && nResult == 0; nInd++ ) - { - if ( pAdvises[nInd] == pOwnAdvise ) - { - nResult = nInd; - } - else if ( pAdvises[nInd] == NULL ) - { - pAdvises[nInd] = pOwnAdvise; - nResult = nInd; - } - } - } - - return nResult; -} - -//------------------------------------------------------------------------------- -void InprocEmbedDocument_Impl::Clean() -{ - m_pDefHandler = (IUnknown*)NULL; - - // 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] = NULL; - } - - if ( m_pDataAdvises[nInd] ) - { - ComSmart< OleWrapperAdviseSink > pAdvise = m_pDataAdvises[nInd]; - m_pDataAdvises[nInd] = NULL; - } - } - - m_pViewAdvise = NULL; - - m_nInitMode = NOINIT; - m_pStorage = NULL; - - if ( m_pOleContainer ) - { - m_pOleContainer->LockContainer( FALSE ); - m_pOleContainer = NULL; - } - - m_pClientSite = NULL; - - m_nFileOpenMode = 0; - if ( m_pFileName ) - { - delete m_pFileName; - m_pFileName = NULL; - } -} - -// IUnknown -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::QueryInterface( REFIID riid, void FAR* FAR* ppv ) -{ - if(IsEqualIID(riid, IID_IUnknown)) - { - AddRef(); - *ppv = (IUnknown*) (IPersistStorage*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IPersist)) - { - AddRef(); - *ppv = (IPersist*) (IPersistStorage*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IPersistStorage)) - { - AddRef(); - *ppv = (IPersistStorage*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IDataObject)) - { - AddRef(); - *ppv = (IDataObject*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IOleObject)) - { - AddRef(); - *ppv = (IOleObject*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IPersistFile)) - { - AddRef(); - *ppv = (IPersistFile*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IRunnableObject)) - { - AddRef(); - *ppv = (IRunnableObject*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IViewObject)) - { - AddRef(); - *ppv = (IViewObject*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IViewObject2)) - { - AddRef(); - *ppv = (IViewObject2*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IOleCache)) - { - AddRef(); - *ppv = (IOleCache*) &m_aInternalCache; - return S_OK; - } - else if (IsEqualIID(riid, IID_IOleCache2)) - { - AddRef(); - *ppv = (IOleCache2*) &m_aInternalCache; - return S_OK; - } - else if (IsEqualIID(riid, IID_IOleWindow)) - { - AddRef(); - *ppv = (IOleWindow*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IOleInPlaceObject)) - { - AddRef(); - *ppv = (IOleInPlaceObject*) this; - return S_OK; - } - else if (IsEqualIID(riid, IID_IDispatch)) - { - AddRef(); - *ppv = (IDispatch*) this; - return S_OK; - } - - *ppv = NULL; - return ResultFromScode(E_NOINTERFACE); -} - -//------------------------------------------------------------------------------- -STDMETHODIMP_(ULONG) InprocEmbedDocument_Impl::AddRef() -{ - return ++m_refCount; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP_(ULONG) InprocEmbedDocument_Impl::Release() -{ - // unfortunately there are reentrance problems in mfc that have to be workarounded - sal_Int32 nCount = m_refCount > 0 ? --m_refCount : 0; - if ( nCount == 0 && !m_bDeleted ) - { - // deleting of this object can trigger deleting of mfc objects that will try to delete this object one more time - m_bDeleted = TRUE; - - Clean(); - delete this; - } - return nCount; -} - -// IPersist -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetClassID( CLSID* pClassId ) -{ - *pClassId = *&m_guid; - return S_OK; -} - -// IPersistStorage -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::IsDirty() -{ - if ( m_pDefHandler == NULL || m_pOleAdvises[0] == NULL || m_pOleAdvises[0]->IsClosed() ) - return S_FALSE; - - if ( CheckDefHandler() ) - { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) - return pPersist->IsDirty(); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InitNew( IStorage *pStg ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) - { - hr = pPersist->InitNew( pStg ); - if ( SUCCEEDED( hr ) ) - { - m_nInitMode = INIT_FROM_STORAGE; - m_pStorage = pStg; - - m_nFileOpenMode = 0; - if ( m_pFileName ) - { - delete[] m_pFileName; - m_pFileName = NULL; - } - } - - return hr; - } - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Load( IStorage *pStg ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) - { - hr = pPersist->Load( pStg ); - if ( SUCCEEDED( hr ) ) - { - m_nInitMode = LOAD_FROM_STORAGE; - m_pStorage = pStg; - - m_nFileOpenMode = 0; - if ( m_pFileName ) - { - delete[] m_pFileName; - m_pFileName = NULL; - } - } - - return hr; - } - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Save( IStorage *pStgSave, BOOL fSameAsLoad ) -{ - if ( fSameAsLoad && ( m_pDefHandler == NULL || m_pOleAdvises[0] == NULL || m_pOleAdvises[0]->IsClosed() ) ) - return S_OK; - - if ( CheckDefHandler() ) - { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) - return pPersist->Save( pStgSave, fSameAsLoad ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SaveCompleted( IStorage *pStgNew ) -{ - if ( m_pDefHandler == NULL || m_pOleAdvises[0] == NULL || m_pOleAdvises[0]->IsClosed() ) - { - if ( pStgNew ) - m_pStorage = pStgNew; - - return S_OK; - } - - if ( CheckDefHandler() ) - { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) - { - hr = pPersist->SaveCompleted( pStgNew ); - if ( SUCCEEDED( hr ) ) - { - m_nInitMode = LOAD_FROM_STORAGE; - if ( pStgNew ) - { - m_pStorage = pStgNew; - } - - m_nFileOpenMode = 0; - if ( m_pFileName ) - { - delete[] m_pFileName; - m_pFileName = NULL; - } - } - - return hr; - } - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::HandsOffStorage() -{ - if ( CheckDefHandler() ) - { - ComSmart< IPersistStorage > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) - { - hr = pPersist->HandsOffStorage(); - if ( SUCCEEDED( hr ) ) - { - m_pStorage = NULL; - } - - return hr; - } - } - - return E_FAIL; -} - -// IPersistFile -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Load( LPCOLESTR pszFileName, DWORD dwMode ) -{ - if ( CheckDefHandler() && pszFileName ) - { - ComSmart< IPersistFile > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) - { - hr = pPersist->Load( pszFileName, dwMode ); - if ( SUCCEEDED( hr ) ) - { - m_nInitMode = LOAD_FROM_FILE; - if ( m_pStorage ) - m_pStorage = NULL; - - m_nFileOpenMode = dwMode; - // copy the string - SetName( pszFileName, m_pFileName ); - } - - return hr; - } - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Save( LPCOLESTR pszFileName, BOOL fRemember ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IPersistFile > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) - return pPersist->Save( pszFileName, fRemember ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SaveCompleted( LPCOLESTR pszFileName ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IPersistFile > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) - { - hr = pPersist->SaveCompleted( pszFileName ); - if ( SUCCEEDED( hr ) ) - { - m_nInitMode = LOAD_FROM_STORAGE; - if ( m_pStorage ) - m_pStorage = NULL; - - m_nFileOpenMode = STGM_READWRITE; // was just written - // copy the string - SetName( pszFileName, m_pFileName ); - } - } - - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetCurFile( LPOLESTR *ppszFileName ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IPersistFile > pPersist; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, (void**)&pPersist ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pPersist ) - return pPersist->GetCurFile( ppszFileName ); - } - - return E_FAIL; -} - -// IOleObject -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SetClientSite( IOleClientSite* pSite ) -{ - if ( pSite == m_pClientSite ) - return S_OK; - - if ( !pSite ) - { - m_pClientSite = NULL; - if ( m_pOleContainer ) - { - m_pOleContainer->LockContainer( FALSE ); - m_pOleContainer = NULL; - } - } - - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - { - HRESULT hr = pOleObject->SetClientSite( pSite ); - if ( SUCCEEDED( hr ) ) - { - m_pClientSite = pSite; - - if ( m_pOleContainer ) - { - m_pOleContainer->LockContainer( FALSE ); - m_pOleContainer = NULL; - } - - m_pClientSite->GetContainer( &m_pOleContainer ); - if ( m_pOleContainer ) - m_pOleContainer->LockContainer( TRUE ); - } - - return hr; - } - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetClientSite( IOleClientSite** pSite ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->GetClientSite( pSite ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SetHostNames( LPCOLESTR szContainerApp, LPCOLESTR szContainerObj ) -{ - - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - { - hr = pOleObject->SetHostNames( szContainerApp, szContainerObj ); - } - } - - return S_OK; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Close( DWORD dwSaveOption ) -{ - if ( m_pDefHandler && CheckDefHandler() ) - { - // no need to close if there is no default handler. - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - { - hr = pOleObject->Close( dwSaveOption ); - hr = CoDisconnectObject( (IUnknown*)(IPersistStorage*)this, 0 ); - } - } - - // if the object is closed from outside that means that it should go to uninitialized state - Clean(); - - return S_OK; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SetMoniker( DWORD dwWhichMoniker, IMoniker * pmk ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->SetMoniker( dwWhichMoniker, pmk ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetMoniker( DWORD dwAssign, DWORD dwWhichMoniker, IMoniker ** ppmk ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->GetMoniker( dwAssign, dwWhichMoniker, ppmk ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InitFromData( IDataObject * pDataObject, BOOL fCreation, DWORD dwReserved ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->InitFromData( pDataObject, fCreation, dwReserved ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetClipboardData( DWORD dwReserved, IDataObject ** ppDataObject ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->GetClipboardData( dwReserved, ppDataObject ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::DoVerb( - LONG iVerb, - LPMSG pMsg, - IOleClientSite *pActiveSite, - LONG nLong, - HWND hWin, - LPCRECT pRect ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - { - hr = pOleObject->DoVerb( iVerb, pMsg, pActiveSite, nLong, hWin, pRect ); - if ( SUCCEEDED( hr ) ) - { - } - - return hr; - } - - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::EnumVerbs( IEnumOLEVERB ** ppEnumOleVerb ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->EnumVerbs( ppEnumOleVerb ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Update() -{ - - if ( m_pDefHandler && CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->Update(); - } - - return S_OK; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::IsUpToDate() -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->IsUpToDate(); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetUserClassID( CLSID *pClsid ) -{ - if ( pClsid ) - *pClsid = m_guid; - - return S_OK; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetUserType( DWORD dwFormOfType, LPOLESTR * pszUserType ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->GetUserType( dwFormOfType, pszUserType ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SetExtent( DWORD dwDrawAspect, SIZEL *psizel ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->SetExtent( dwDrawAspect, psizel ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetExtent( DWORD dwDrawAspect, SIZEL * psizel ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->GetExtent( dwDrawAspect, psizel ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Advise( IAdviseSink *pAdvSink, DWORD *pdwConnection ) -{ - - if ( !pdwConnection ) - return E_FAIL; - - // CheckDefHandler will set the listener, avoid reusing of old listener - if ( DEFAULT_ARRAY_LEN > *pdwConnection && *pdwConnection > 0 && m_pOleAdvises[*pdwConnection] ) - { - m_pOleAdvises[*pdwConnection]->DisconnectOrigAdvise(); - m_pOleAdvises[*pdwConnection] = NULL; - } - - if ( pAdvSink && CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - { - ComSmart< OleWrapperAdviseSink > pOwnAdvise( new OleWrapperAdviseSink( pAdvSink ) ); - DWORD nRegID = 0; - - if ( SUCCEEDED( pOleObject->Advise( pOwnAdvise, &nRegID ) ) && nRegID > 0 ) - { - pOwnAdvise->SetRegID( nRegID ); - *pdwConnection = InsertAdviseLinkToList( pOwnAdvise, m_pOleAdvises ); - if ( *pdwConnection ) - return S_OK; - else - pOleObject->Unadvise( nRegID ); - } - } - } - - // return success always for now - return S_OK; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Unadvise( DWORD dwConnection ) -{ - if ( DEFAULT_ARRAY_LEN > dwConnection && dwConnection > 0 && m_pOleAdvises[dwConnection] ) - { - if ( m_pDefHandler ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - { - DWORD nID = m_pOleAdvises[dwConnection]->GetRegID(); - pOleObject->Unadvise( nID ); - } - } - - m_pOleAdvises[dwConnection]->DisconnectOrigAdvise(); - m_pOleAdvises[dwConnection] = NULL; - - return S_OK; - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::EnumAdvise( IEnumSTATDATA ** /*ppenumAdvise*/ ) -{ - return E_NOTIMPL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetMiscStatus( DWORD dwAspect, DWORD * pdwStatus ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->GetMiscStatus( dwAspect, pdwStatus ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SetColorScheme( LOGPALETTE * pLogpal ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleObject > pOleObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pOleObject ) - return pOleObject->SetColorScheme( pLogpal ); - } - - return E_FAIL; -} - -//IDataObject -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetData( FORMATETC * pFormatetc, STGMEDIUM * pMedium ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) - return pIDataObject->GetData( pFormatetc, pMedium ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetDataHere( FORMATETC * pFormatetc, STGMEDIUM * pMedium ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) - return pIDataObject->GetDataHere( pFormatetc, pMedium ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::QueryGetData( FORMATETC * pFormatetc ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) - return pIDataObject->QueryGetData( pFormatetc ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetCanonicalFormatEtc( FORMATETC * pFormatetcIn, FORMATETC * pFormatetcOut ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) - return pIDataObject->GetCanonicalFormatEtc( pFormatetcIn, pFormatetcOut ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SetData( FORMATETC * pFormatetc, STGMEDIUM * pMedium, BOOL fRelease ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) - return pIDataObject->SetData( pFormatetc, pMedium, fRelease ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC ** ppFormatetc ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) - return pIDataObject->EnumFormatEtc( dwDirection, ppFormatetc ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::DAdvise( FORMATETC * pFormatetc, DWORD advf, IAdviseSink * pAdvSink, DWORD * pdwConnection ) -{ - - if ( !pdwConnection ) - return E_FAIL; - - // avoid reusing of the old listener - if ( m_pDefHandler && DEFAULT_ARRAY_LEN > *pdwConnection && *pdwConnection > 0 && m_pDataAdvises[*pdwConnection] ) - { - m_pDataAdvises[*pdwConnection]->DisconnectOrigAdvise(); - m_pDataAdvises[*pdwConnection] = NULL; - } - - if ( pAdvSink && CheckDefHandler() ) - { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) - { - ComSmart< OleWrapperAdviseSink > pOwnAdvise( new OleWrapperAdviseSink( ComSmart<IAdviseSink>( pAdvSink ), pFormatetc, advf ) ); - DWORD nRegID = 0; - - if ( SUCCEEDED( pIDataObject->DAdvise( pFormatetc, advf, pOwnAdvise, &nRegID ) ) && nRegID > 0 ) - { - pOwnAdvise->SetRegID( nRegID ); - *pdwConnection = InsertAdviseLinkToList( pOwnAdvise, m_pDataAdvises ); - if ( *pdwConnection ) - return S_OK; - else - pIDataObject->DUnadvise( nRegID ); - } - } - } - - // return success always for now - return S_OK; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::DUnadvise( DWORD dwConnection ) -{ - if ( m_pDefHandler && DEFAULT_ARRAY_LEN > dwConnection && dwConnection > 0 && m_pDataAdvises[dwConnection] ) - { - if ( CheckDefHandler() ) - { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) - { - DWORD nID = m_pDataAdvises[dwConnection]->GetRegID(); - pIDataObject->DUnadvise( nID ); - } - } - - m_pDataAdvises[dwConnection]->DisconnectOrigAdvise(); - m_pDataAdvises[dwConnection] = NULL; - - return S_OK; - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::EnumDAdvise( IEnumSTATDATA ** ppenumAdvise ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDataObject > pIDataObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDataObject ) - return pIDataObject->EnumDAdvise( ppenumAdvise ); - } - - return E_FAIL; -} - -// IRunnableObject -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetRunningClass( LPCLSID lpClsid ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IRunnableObject > pIRunObj; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIRunObj ) - return pIRunObj->GetRunningClass( lpClsid ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Run( LPBINDCTX pbc ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IRunnableObject > pIRunObj; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIRunObj ) - return pIRunObj->Run( pbc ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -BOOL STDMETHODCALLTYPE InprocEmbedDocument_Impl::IsRunning() -{ - if ( CheckDefHandler() ) - { - ComSmart< IRunnableObject > pIRunObj; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIRunObj ) - return pIRunObj->IsRunning(); - } - - return E_FAIL; - -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::LockRunning( BOOL fLock, BOOL fLastUnlockCloses ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IRunnableObject > pIRunObj; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIRunObj ) - return pIRunObj->LockRunning( fLock, fLastUnlockCloses ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SetContainedObject( BOOL fContained) -{ - if ( CheckDefHandler() ) - { - ComSmart< IRunnableObject > pIRunObj; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIRunObj ) - return pIRunObj->SetContainedObject( fContained ); - } - - return E_FAIL; -} - - -// IViewObject methods -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Draw( DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL ( STDMETHODCALLTYPE *pfnContinue )( ULONG_PTR dwContinue ), ULONG_PTR dwContinue ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IViewObject > pIViewObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject ) - return pIViewObject->Draw( dwDrawAspect, lindex, pvAspect, ptd, hdcTargetDev, hdcDraw, lprcBounds, lprcWBounds, pfnContinue, dwContinue ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetColorSet( DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IViewObject > pIViewObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject ) - return pIViewObject->GetColorSet( dwDrawAspect, lindex, pvAspect, ptd, hicTargetDev, ppColorSet ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Freeze( DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IViewObject > pIViewObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject ) - return pIViewObject->Freeze( dwDrawAspect, lindex, pvAspect, pdwFreeze ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Unfreeze( DWORD dwFreeze ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IViewObject > pIViewObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject ) - return pIViewObject->Unfreeze( dwFreeze ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SetAdvise( DWORD aspects, DWORD advf, IAdviseSink *pAdvSink ) -{ - - // CheckDefHandler will set the listener, avoid reusing of old listener - if ( m_pViewAdvise ) - { - m_pViewAdvise->DisconnectOrigAdvise(); - m_pViewAdvise = NULL; - } - - if ( pAdvSink && CheckDefHandler() ) - { - ComSmart< IViewObject > pIViewObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject ) - { - ComSmart< OleWrapperAdviseSink > pOwnAdvise( new OleWrapperAdviseSink( pAdvSink, aspects, advf ) ); - - if ( SUCCEEDED( pIViewObject->SetAdvise( aspects, advf, pOwnAdvise ) ) ) - { - m_pViewAdvise = pOwnAdvise; - return S_OK; - } - } - } - - return S_OK; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetAdvise( DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink ) -{ - if ( !ppAdvSink ) - return E_INVALIDARG; - - if ( m_pViewAdvise ) - { - if ( pAspects ) - *pAspects = m_pViewAdvise->GetAspect(); - - if ( pAdvf ) - *pAdvf = m_pViewAdvise->GetViewAdviseFlag(); - - *ppAdvSink = m_pViewAdvise->GetOrigAdvise(); - if ( *ppAdvSink ) - (*ppAdvSink)->AddRef(); - } - else - *ppAdvSink = NULL; - - return S_OK; -} - -// IViewObject2 methods -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetExtent( DWORD dwDrawAspect, LONG lindex, DVTARGETDEVICE *ptd, LPSIZEL lpsizel ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IViewObject2 > pIViewObject2; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject2, (void**)&pIViewObject2 ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIViewObject2 ) - return pIViewObject2->GetExtent( dwDrawAspect, lindex, ptd, lpsizel ); - } - - return E_FAIL; -} - - - -// IOleWindow methods -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetWindow( HWND *phwnd ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleWindow > pIOleWindow; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleWindow, (void**)&pIOleWindow ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleWindow ) - return pIOleWindow->GetWindow( phwnd ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::ContextSensitiveHelp( BOOL fEnterMode ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleWindow > pIOleWindow; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleWindow, (void**)&pIOleWindow ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleWindow ) - return pIOleWindow->ContextSensitiveHelp( fEnterMode ); - } - - return E_FAIL; -} - - -// IOleInPlaceObject methods -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InPlaceDeactivate( void ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleInPlaceObject > pIOleInPlaceObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, (void**)&pIOleInPlaceObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleInPlaceObject ) - return pIOleInPlaceObject->InPlaceDeactivate(); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::UIDeactivate( void ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleInPlaceObject > pIOleInPlaceObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, (void**)&pIOleInPlaceObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleInPlaceObject ) - return pIOleInPlaceObject->UIDeactivate(); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::SetObjectRects( LPCRECT lprcPosRect, LPCRECT lprcClipRect ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleInPlaceObject > pIOleInPlaceObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, (void**)&pIOleInPlaceObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleInPlaceObject ) - return pIOleInPlaceObject->SetObjectRects( lprcPosRect, lprcClipRect ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::ReactivateAndUndo( void ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IOleInPlaceObject > pIOleInPlaceObject; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, (void**)&pIOleInPlaceObject ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleInPlaceObject ) - return pIOleInPlaceObject->ReactivateAndUndo(); - } - - return E_FAIL; -} - - -// IDispatch methods -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetTypeInfoCount( UINT *pctinfo ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDispatch > pIDispatch; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, (void**)&pIDispatch ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDispatch ) - return pIDispatch->GetTypeInfoCount( pctinfo ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetTypeInfo( UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDispatch > pIDispatch; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, (void**)&pIDispatch ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDispatch ) - return pIDispatch->GetTypeInfo( iTInfo, lcid, ppTInfo ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::GetIDsOfNames( REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDispatch > pIDispatch; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, (void**)&pIDispatch ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDispatch ) - return pIDispatch->GetIDsOfNames( riid, rgszNames, cNames, lcid, rgDispId ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr ) -{ - if ( CheckDefHandler() ) - { - ComSmart< IDispatch > pIDispatch; - HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, (void**)&pIDispatch ); - - ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIDispatch ) - return pIDispatch->Invoke( dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr ); - } - - return E_FAIL; -} - - -// ==== -// InternalCacheWrapper -// ==== - -// IUnknown -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::QueryInterface( REFIID riid, void FAR* FAR* ppv ) -{ - return m_rOwnDocument.QueryInterface( riid, ppv ); -} - -//------------------------------------------------------------------------------- -STDMETHODIMP_(ULONG) InprocEmbedDocument_Impl::InternalCacheWrapper::AddRef() -{ - return m_rOwnDocument.AddRef(); -} - -//------------------------------------------------------------------------------- -STDMETHODIMP_(ULONG) InprocEmbedDocument_Impl::InternalCacheWrapper::Release() -{ - return m_rOwnDocument.Release(); -} - -// IOleCache methods -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::Cache( FORMATETC *pformatetc, DWORD advf, DWORD *pdwConnection ) -{ - if ( m_rOwnDocument.CheckDefHandler() ) - { - ComSmart< IOleCache > pIOleCache; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, (void**)&pIOleCache ); - - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache ) - return pIOleCache->Cache( pformatetc, advf, pdwConnection ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::Uncache( DWORD dwConnection ) -{ - if ( m_rOwnDocument.CheckDefHandler() ) - { - ComSmart< IOleCache > pIOleCache; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, (void**)&pIOleCache ); - - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache ) - return pIOleCache->Uncache( dwConnection ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::EnumCache( IEnumSTATDATA **ppenumSTATDATA ) -{ - if ( m_rOwnDocument.CheckDefHandler() ) - { - ComSmart< IOleCache > pIOleCache; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, (void**)&pIOleCache ); - - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache ) - return pIOleCache->EnumCache( ppenumSTATDATA ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::InitCache( IDataObject *pDataObject ) -{ - if ( m_rOwnDocument.CheckDefHandler() ) - { - ComSmart< IOleCache > pIOleCache; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, (void**)&pIOleCache ); - - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache ) - return pIOleCache->InitCache( pDataObject ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::SetData( FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease ) -{ - if ( m_rOwnDocument.CheckDefHandler() ) - { - ComSmart< IOleCache > pIOleCache; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, (void**)&pIOleCache ); - - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache ) - return pIOleCache->SetData( pformatetc, pmedium, fRelease ); - } - - return E_FAIL; -} - -// IOleCache2 methods -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::UpdateCache( LPDATAOBJECT pDataObject, DWORD grfUpdf, LPVOID pReserved ) -{ - if ( m_rOwnDocument.CheckDefHandler() ) - { - ComSmart< IOleCache2 > pIOleCache2; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache2, (void**)&pIOleCache2 ); - - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache2 ) - return pIOleCache2->UpdateCache( pDataObject, grfUpdf, pReserved ); - } - - return E_FAIL; -} - -//------------------------------------------------------------------------------- -STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::DiscardCache( DWORD dwDiscardOptions ) -{ - if ( m_rOwnDocument.CheckDefHandler() ) - { - ComSmart< IOleCache2 > pIOleCache2; - HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache2, (void**)&pIOleCache2 ); - - ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem - if ( SUCCEEDED( hr ) && pIOleCache2 ) - return pIOleCache2->DiscardCache( dwDiscardOptions ); - } - - return E_FAIL; -} - -}; // namespace inprocserv - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inprocserv/inprocembobj.h b/embedserv/source/inprocserv/inprocembobj.h deleted file mode 100644 index ebbbd393e..000000000 --- a/embedserv/source/inprocserv/inprocembobj.h +++ /dev/null @@ -1,244 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _INPROCEMBOBJ_HXX_ -#define _INPROCEMBOBJ_HXX_ - -#pragma warning(disable : 4668) - -#include <windows.h> -#include <oleidl.h> - -#include "smartpointer.hxx" -#include "advisesink.hxx" - -#define DEFAULT_ARRAY_LEN 256 - -namespace inprocserv { - -enum InitModes { - NOINIT, - INIT_FROM_STORAGE, - LOAD_FROM_STORAGE, - LOAD_FROM_FILE -}; - -// ================================== -// this is a common baseclass that is used to count the objects -// ================================== -class InprocCountedObject_Impl -{ -public: - InprocCountedObject_Impl(); - ~InprocCountedObject_Impl(); -}; - -// ================================== -// this is the inprocess embedded object implementation class -// ================================== -class InprocEmbedDocument_Impl : public InprocCountedObject_Impl - , public IOleObject - , public IDataObject - , public IPersistStorage - , public IPersistFile - , public IRunnableObject - , public IViewObject2 - // , public IExternalConnection - , public IOleInPlaceObject - , public IDispatch -{ - ULONG m_refCount; - BOOLEAN m_bDeleted; - - GUID m_guid; - - ComSmart< IUnknown > m_pDefHandler; - InitModes m_nInitMode; - - DWORD m_nFileOpenMode; - wchar_t* m_pFileName; - - ComSmart< IStorage > m_pStorage; - - ComSmart< IOleClientSite > m_pClientSite; - ComSmart< 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; - - class InternalCacheWrapper : public IOleCache2 - { - InprocEmbedDocument_Impl& m_rOwnDocument; - - public: - InternalCacheWrapper( InprocEmbedDocument_Impl& rOwnDocument ) - : m_rOwnDocument( rOwnDocument ) - {} - - /* IUnknown methods */ - STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR * ppvObj); - STDMETHOD_(ULONG, AddRef)(); - STDMETHOD_(ULONG, Release)(); - - /* IOleCache2 methods */ - STDMETHOD(Cache)( FORMATETC *pformatetc, DWORD advf, DWORD *pdwConnection); - STDMETHOD(Uncache)( DWORD dwConnection); - STDMETHOD(EnumCache)( IEnumSTATDATA **ppenumSTATDATA); - STDMETHOD(InitCache)( IDataObject *pDataObject); - STDMETHOD(SetData)( FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease); - STDMETHOD(UpdateCache)( LPDATAOBJECT pDataObject, DWORD grfUpdf, LPVOID pReserved); - STDMETHOD(DiscardCache)( DWORD dwDiscardOptions); - } m_aInternalCache; - - - DWORD InsertAdviseLinkToList( const ComSmart<OleWrapperAdviseSink>& pOwnAdvise, ComSmart< OleWrapperAdviseSink > pAdvises[] ); - void Clean(); - - -public: - - InprocEmbedDocument_Impl( const GUID& guid ) - : m_refCount( 0 ) - , m_bDeleted( FALSE ) - , m_guid( guid ) - , m_nInitMode( NOINIT ) - , m_nFileOpenMode( 0 ) - , m_pFileName( NULL ) - , m_nCallsOnStack( 0 ) - , m_aInternalCache( *this ) - {} - - virtual ~InprocEmbedDocument_Impl() - {} - - HRESULT Init(); - void SetName( LPCOLESTR pszNameFromOutside, wchar_t*& pOwnName ); - - BOOL CheckDefHandler(); - ComSmart< IUnknown >& GetDefHandler() { return m_pDefHandler; } - - /* IUnknown methods */ - STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR * ppvObj); - STDMETHOD_(ULONG, AddRef)(); - STDMETHOD_(ULONG, Release)(); - - /* IOleObject methods */ - STDMETHOD(SetClientSite) ( IOleClientSite* pSite ); - STDMETHOD(GetClientSite) ( IOleClientSite** pSite ); - STDMETHOD(SetHostNames) ( LPCOLESTR szContainerApp, LPCOLESTR szContainerObj ); - STDMETHOD(Close) ( DWORD dwSaveOption); - STDMETHOD(SetMoniker) ( DWORD dwWhichMoniker, IMoniker *pmk ); - STDMETHOD(GetMoniker) ( DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk ); - STDMETHOD(InitFromData) ( IDataObject *pDataObject, BOOL fCreation, DWORD dwReserved ); - STDMETHOD(GetClipboardData) ( DWORD dwReserved, IDataObject **ppDataObject ); - STDMETHOD(DoVerb) ( LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect ); - STDMETHOD(EnumVerbs) ( IEnumOLEVERB **ppEnumOleVerb ); - STDMETHOD(Update) (); - STDMETHOD(IsUpToDate) (); - STDMETHOD(GetUserClassID) ( CLSID *pClsid ); - STDMETHOD(GetUserType) ( DWORD dwFormOfType, LPOLESTR *pszUserType ); - STDMETHOD(SetExtent) ( DWORD dwDrawAspect, SIZEL *psizel ); - STDMETHOD(GetExtent) ( DWORD dwDrawAspect, SIZEL *psizel ); - STDMETHOD(Advise) ( IAdviseSink *pAdvSink, DWORD *pdwConnection ); - STDMETHOD(Unadvise) ( DWORD dwConnection ); - STDMETHOD(EnumAdvise) ( IEnumSTATDATA **ppenumAdvise ); - STDMETHOD(GetMiscStatus) ( DWORD dwAspect, DWORD *pdwStatus ); - STDMETHOD(SetColorScheme) ( LOGPALETTE *pLogpal ); - - /* IDataObject methods */ - STDMETHOD(GetData) ( FORMATETC * pFormatetc, STGMEDIUM * pMedium ); - STDMETHOD(GetDataHere) ( FORMATETC * pFormatetc, STGMEDIUM * pMedium ); - STDMETHOD(QueryGetData) ( FORMATETC * pFormatetc ); - STDMETHOD(GetCanonicalFormatEtc) ( FORMATETC * pFormatetcIn, FORMATETC * pFormatetcOut ); - STDMETHOD(SetData) ( FORMATETC * pFormatetc, STGMEDIUM * pMedium, BOOL fRelease ); - STDMETHOD(EnumFormatEtc) ( DWORD dwDirection, IEnumFORMATETC ** ppFormatetc ); - STDMETHOD(DAdvise) ( FORMATETC * pFormatetc, DWORD advf, IAdviseSink * pAdvSink, DWORD * pdwConnection ); - STDMETHOD(DUnadvise) ( DWORD dwConnection ); - STDMETHOD(EnumDAdvise) ( IEnumSTATDATA ** ppenumAdvise ); - - /* IPersistMethod */ - STDMETHOD(GetClassID)(CLSID *pClassID); - - /* IPersistStorage methods */ - STDMETHOD(IsDirty) (); - STDMETHOD(InitNew) ( IStorage *pStg ); - STDMETHOD(Load) ( IStorage* pStr ); - STDMETHOD(Save) ( IStorage *pStgSave, BOOL fSameAsLoad ); - STDMETHOD(SaveCompleted) ( IStorage *pStgNew ); - STDMETHOD(HandsOffStorage) (void); - - /* IPersistFile methods */ - STDMETHOD(Load) ( LPCOLESTR pszFileName, DWORD dwMode ); - STDMETHOD(Save) ( LPCOLESTR pszFileName, BOOL fRemember ); - STDMETHOD(SaveCompleted) ( LPCOLESTR pszFileName ); - STDMETHOD(GetCurFile) ( LPOLESTR *ppszFileName ); - - /* IRunnableObject methods */ - STDMETHOD(GetRunningClass) ( LPCLSID lpClsid); - STDMETHOD(Run) ( LPBINDCTX pbc); - virtual BOOL STDMETHODCALLTYPE IsRunning( void); - STDMETHOD(LockRunning) ( BOOL fLock, BOOL fLastUnlockCloses ); - STDMETHOD(SetContainedObject) ( BOOL fContained); - - /* IViewObject2 methods */ - STDMETHOD(Draw)( DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL ( STDMETHODCALLTYPE *pfnContinue )( ULONG_PTR dwContinue ), ULONG_PTR dwContinue); - STDMETHOD(GetColorSet)( DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet); - STDMETHOD(Freeze)( DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze); - STDMETHOD(Unfreeze)( DWORD dwFreeze); - STDMETHOD(SetAdvise)( DWORD aspects, DWORD advf, IAdviseSink *pAdvSink); - STDMETHOD(GetAdvise)( DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink); - STDMETHOD(GetExtent)( DWORD dwDrawAspect, LONG lindex, DVTARGETDEVICE *ptd, LPSIZEL lpsizel); - - /* IOleWindow methods */ - STDMETHOD(GetWindow)( HWND *phwnd); - STDMETHOD(ContextSensitiveHelp)( BOOL fEnterMode); - - /* IOleInPlaceObject methods */ - STDMETHOD(InPlaceDeactivate)( void); - STDMETHOD(UIDeactivate)( void); - STDMETHOD(SetObjectRects)( LPCRECT lprcPosRect, LPCRECT lprcClipRect); - STDMETHOD(ReactivateAndUndo)( void); - - /*IDispatch methods*/ - STDMETHOD(GetTypeInfoCount)( UINT *pctinfo); - STDMETHOD(GetTypeInfo)( UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); - STDMETHOD(GetIDsOfNames)( REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); - STDMETHOD(Invoke)( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); - -}; - -} // namespace inprocserv - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embedserv/source/inprocserv/makefile.mk b/embedserv/source/inprocserv/makefile.mk deleted file mode 100644 index 024e0f9d4..000000000 --- a/embedserv/source/inprocserv/makefile.mk +++ /dev/null @@ -1,80 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=..$/.. -PRJNAME=embedserv -TARGET=inprocserv - -use_shl_versions= - -# --- Settings ---------------------------------- -.INCLUDE : settings.mk - -.IF "$(GUI)" == "WNT" - -LIBTARGET=NO -USE_DEFFILE=YES -LIBCMT=libcmt.lib -UWINAPILIB= - -# --- Files ------------------------------------- - -SLOFILES=\ - $(SLO)$/dllentry.obj \ - $(SLO)$/advisesink.obj \ - $(SLO)$/inprocembobj.obj - -SHL1TARGET=$(TARGET) -.IF "$(COM)"=="GCC" -SHL1STDLIBS += -lstdc++ -.IF "$(MINGW_GCCLIB_EH)"=="YES" -SHL1STDLIBS += -lgcc_eh -.ENDIF -SHL1STDLIBS += -lgcc -lmingw32 -lmoldname -lmsvcrt -.ELSE -SHL1STDLIBS= -.ENDIF - -SHL1STDLIBS+=\ - $(UUIDLIB)\ - $(OLE32LIB)\ - $(GDI32LIB)\ - $(ADVAPI32LIB) - -SHL1OBJS=$(SLOFILES) - -SHL1DEF=$(MISC)$/$(TARGET).def - -DEF1NAME= $(TARGET) -DEF1EXPORTFILE= exports.dxp - -.ENDIF - -# --- Targets ---------------------------------- - -.INCLUDE : target.mk - diff --git a/embedserv/source/inprocserv/smartpointer.hxx b/embedserv/source/inprocserv/smartpointer.hxx deleted file mode 100644 index c4f25c4dc..000000000 --- a/embedserv/source/inprocserv/smartpointer.hxx +++ /dev/null @@ -1,185 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _INPROCSERV_SMARTPOINTER_HXX_ -#define _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 = NULL; - pInterface->Release(); - } - } - -public: - ComSmart() - : m_pInterface( NULL ) - {} - - ComSmart( const ComSmart<T>& rObj ) - : m_pInterface( rObj.m_pInterface ) - { - if ( m_pInterface != NULL ) - m_pInterface->AddRef(); - } - - ComSmart( T* pInterface ) - : m_pInterface( pInterface ) - { - if ( m_pInterface != NULL ) - m_pInterface->AddRef(); - } - - ~ComSmart() - { - OwnRelease(); - } - - ComSmart& operator=( const ComSmart<T>& rObj ) - { - OwnRelease(); - - m_pInterface = rObj.m_pInterface; - - if ( m_pInterface != NULL ) - m_pInterface->AddRef(); - - return *this; - } - - ComSmart<T>& operator=( T* pInterface ) - { - OwnRelease(); - - m_pInterface = pInterface; - - if ( m_pInterface != NULL ) - m_pInterface->AddRef(); - - return *this; - } - - operator T*() const - { - return m_pInterface; - } - - T& operator*() const - { - return *m_pInterface; - } - - T** operator&() - { - OwnRelease(); - - m_pInterface = NULL; - - 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: - 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: - 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: */ |