1*f78e906fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*f78e906fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*f78e906fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*f78e906fSAndrew Rist * distributed with this work for additional information
6*f78e906fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*f78e906fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*f78e906fSAndrew Rist * "License"); you may not use this file except in compliance
9*f78e906fSAndrew Rist * with the License. You may obtain a copy of the License at
10*f78e906fSAndrew Rist *
11*f78e906fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*f78e906fSAndrew Rist *
13*f78e906fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*f78e906fSAndrew Rist * software distributed under the License is distributed on an
15*f78e906fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f78e906fSAndrew Rist * KIND, either express or implied. See the License for the
17*f78e906fSAndrew Rist * specific language governing permissions and limitations
18*f78e906fSAndrew Rist * under the License.
19*f78e906fSAndrew Rist *
20*f78e906fSAndrew Rist *************************************************************/
21*f78e906fSAndrew Rist
22*f78e906fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #include <embservconst.h>
25cdf0e10cSrcweir #include "inprocembobj.h"
26cdf0e10cSrcweir
27cdf0e10cSrcweir namespace inprocserv
28cdf0e10cSrcweir {
29cdf0e10cSrcweir
30cdf0e10cSrcweir #ifdef OWNDEBUG
31cdf0e10cSrcweir //-------------------------------------------------------------------------------
WriteDebugInfo(DWORD pThis,char * pString,DWORD nToWrite)32cdf0e10cSrcweir void WriteDebugInfo( DWORD pThis, char* pString, DWORD nToWrite )
33cdf0e10cSrcweir {
34cdf0e10cSrcweir if ( nToWrite )
35cdf0e10cSrcweir {
36cdf0e10cSrcweir char pNumber[12];
37cdf0e10cSrcweir pNumber[0] = '0';
38cdf0e10cSrcweir pNumber[1] = 'x';
39cdf0e10cSrcweir for ( int nInd = 0; nInd < 8; nInd++ )
40cdf0e10cSrcweir pNumber[nInd+2] = (char)( ( pThis / ( 1 << ( 7 - nInd ) ) ) % 16 ) + 48;
41cdf0e10cSrcweir pNumber[10] = ' ';
42cdf0e10cSrcweir pNumber[11] = 0;
43cdf0e10cSrcweir
44cdf0e10cSrcweir HANDLE pFile = CreateFileA( "h:\\inproc.log", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, NULL );
45cdf0e10cSrcweir if ( pFile )
46cdf0e10cSrcweir {
47cdf0e10cSrcweir DWORD dwWritten = 0;
48cdf0e10cSrcweir SetFilePointer( pFile, 0, 0, FILE_END );
49cdf0e10cSrcweir WriteFile( pFile, pNumber, 11, &dwWritten, NULL );
50cdf0e10cSrcweir WriteFile( pFile, pString, nToWrite - 1, &dwWritten, NULL );
51cdf0e10cSrcweir CloseHandle( pFile );
52cdf0e10cSrcweir }
53cdf0e10cSrcweir }
54cdf0e10cSrcweir }
55cdf0e10cSrcweir #endif
56cdf0e10cSrcweir
57cdf0e10cSrcweir //-------------------------------------------------------------------------------
StringsEqual(LPCOLESTR pszNameFromOutside,wchar_t * pOwnName)58cdf0e10cSrcweir BOOL StringsEqual( LPCOLESTR pszNameFromOutside, wchar_t* pOwnName )
59cdf0e10cSrcweir {
60cdf0e10cSrcweir BOOL bResult = TRUE;
61cdf0e10cSrcweir
62cdf0e10cSrcweir if ( pszNameFromOutside && pOwnName )
63cdf0e10cSrcweir {
64cdf0e10cSrcweir for ( int nInd = 0; pszNameFromOutside[nInd] != 0 || pOwnName[nInd] != 0; nInd++ )
65cdf0e10cSrcweir {
66cdf0e10cSrcweir if ( pszNameFromOutside[nInd] != pOwnName[nInd] )
67cdf0e10cSrcweir {
68cdf0e10cSrcweir bResult = FALSE;
69cdf0e10cSrcweir break;
70cdf0e10cSrcweir }
71cdf0e10cSrcweir }
72cdf0e10cSrcweir }
73cdf0e10cSrcweir else if ( pszNameFromOutside || pOwnName )
74cdf0e10cSrcweir bResult = FALSE;
75cdf0e10cSrcweir
76cdf0e10cSrcweir return bResult;
77cdf0e10cSrcweir }
78cdf0e10cSrcweir
79cdf0e10cSrcweir //-------------------------------------------------------------------------------
Init()80cdf0e10cSrcweir HRESULT InprocEmbedDocument_Impl::Init()
81cdf0e10cSrcweir {
82cdf0e10cSrcweir return S_OK;
83cdf0e10cSrcweir }
84cdf0e10cSrcweir
85cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetName(LPCOLESTR pszNameFromOutside,wchar_t * & pOwnName)86cdf0e10cSrcweir void InprocEmbedDocument_Impl::SetName( LPCOLESTR pszNameFromOutside, wchar_t*& pOwnName )
87cdf0e10cSrcweir {
88cdf0e10cSrcweir if ( !pszNameFromOutside )
89cdf0e10cSrcweir return;
90cdf0e10cSrcweir
91cdf0e10cSrcweir // copy the string
92cdf0e10cSrcweir size_t nLen = 0;
93cdf0e10cSrcweir while( pszNameFromOutside[nLen] != 0 )
94cdf0e10cSrcweir nLen++;
95cdf0e10cSrcweir
96cdf0e10cSrcweir if ( pOwnName )
97cdf0e10cSrcweir {
98cdf0e10cSrcweir delete[] pOwnName;
99cdf0e10cSrcweir pOwnName = NULL;
100cdf0e10cSrcweir }
101cdf0e10cSrcweir
102cdf0e10cSrcweir pOwnName = new wchar_t[nLen+1];
103cdf0e10cSrcweir for ( size_t nInd = 0; nInd < nLen; nInd++ )
104cdf0e10cSrcweir pOwnName[nInd] = pszNameFromOutside[nInd];
105cdf0e10cSrcweir pOwnName[nLen] = 0;
106cdf0e10cSrcweir }
107cdf0e10cSrcweir
108cdf0e10cSrcweir //-------------------------------------------------------------------------------
CheckDefHandler()109cdf0e10cSrcweir BOOL InprocEmbedDocument_Impl::CheckDefHandler()
110cdf0e10cSrcweir {
111cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
112cdf0e10cSrcweir // set the own listener
113cdf0e10cSrcweir if ( m_pOleAdvises[0] == NULL )
114cdf0e10cSrcweir {
115cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
116cdf0e10cSrcweir m_pOleAdvises[0] = new OleWrapperAdviseSink();
117cdf0e10cSrcweir }
118cdf0e10cSrcweir else
119cdf0e10cSrcweir {
120cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
121cdf0e10cSrcweir if ( m_pOleAdvises[0]->IsClosed() )
122cdf0e10cSrcweir {
123cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
124cdf0e10cSrcweir if ( m_pDefHandler )
125cdf0e10cSrcweir {
126cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
127cdf0e10cSrcweir // deregister all the listeners
128cdf0e10cSrcweir
129cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
130cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
131cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
132cdf0e10cSrcweir {
133cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
134cdf0e10cSrcweir for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ )
135cdf0e10cSrcweir if ( m_pOleAdvises[nInd] )
136cdf0e10cSrcweir {
137cdf0e10cSrcweir DWORD nID = m_pOleAdvises[nInd]->GetRegID();
138cdf0e10cSrcweir pOleObject->Unadvise( nID );
139cdf0e10cSrcweir m_pOleAdvises[nInd]->SetRegID( 0 );
140cdf0e10cSrcweir }
141cdf0e10cSrcweir
142cdf0e10cSrcweir pOleObject->SetClientSite( NULL );
143cdf0e10cSrcweir }
144cdf0e10cSrcweir
145cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
146cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
147cdf0e10cSrcweir hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
148cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
151cdf0e10cSrcweir for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ )
152cdf0e10cSrcweir if ( m_pDataAdvises[nInd] )
153cdf0e10cSrcweir {
154cdf0e10cSrcweir DWORD nID = m_pDataAdvises[nInd]->GetRegID();
155cdf0e10cSrcweir pIDataObject->DUnadvise( nID );
156cdf0e10cSrcweir m_pDataAdvises[nInd]->SetRegID( 0 );
157cdf0e10cSrcweir }
158cdf0e10cSrcweir }
159cdf0e10cSrcweir
160cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
161cdf0e10cSrcweir ComSmart< IViewObject > pIViewObject;
162cdf0e10cSrcweir hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject );
163cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIViewObject )
164cdf0e10cSrcweir {
165cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
166cdf0e10cSrcweir if ( m_pViewAdvise )
167cdf0e10cSrcweir pIViewObject->SetAdvise( m_pViewAdvise->GetAspect(), m_pViewAdvise->GetViewAdviseFlag(), NULL );
168cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
169cdf0e10cSrcweir }
170cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
171cdf0e10cSrcweir
172cdf0e10cSrcweir ComSmart< IPersistStorage > pPersist;
173cdf0e10cSrcweir hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist );
174cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
175cdf0e10cSrcweir {
176cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
177cdf0e10cSrcweir // disconnect the old wrapper from the storage
178cdf0e10cSrcweir pPersist->HandsOffStorage();
179cdf0e10cSrcweir }
180cdf0e10cSrcweir
181cdf0e10cSrcweir m_pDefHandler = NULL;
182cdf0e10cSrcweir }
183cdf0e10cSrcweir
184cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
185cdf0e10cSrcweir m_pOleAdvises[0]->UnsetClosed();
186cdf0e10cSrcweir }
187cdf0e10cSrcweir }
188cdf0e10cSrcweir
189cdf0e10cSrcweir if ( m_nCallsOnStack )
190cdf0e10cSrcweir return FALSE;
191cdf0e10cSrcweir
192cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
193cdf0e10cSrcweir if ( !m_pDefHandler )
194cdf0e10cSrcweir {
195cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
196cdf0e10cSrcweir // create a new default inprocess handler
197cdf0e10cSrcweir HRESULT hr = OleCreateDefaultHandler( m_guid, NULL, IID_IUnknown, (void**)&m_pDefHandler );
198cdf0e10cSrcweir if ( SUCCEEDED( hr ) )
199cdf0e10cSrcweir {
200cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
201cdf0e10cSrcweir // // reinit the handler
202cdf0e10cSrcweir // ComSmart< IRunnableObject > pIRunObj;
203cdf0e10cSrcweir // hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj );
204cdf0e10cSrcweir //
205cdf0e10cSrcweir // if ( SUCCEEDED( hr ) && pIRunObj )
206cdf0e10cSrcweir {
207cdf0e10cSrcweir // {
208cdf0e10cSrcweir // ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
209cdf0e10cSrcweir // hr = pIRunObj->Run( NULL );
210cdf0e10cSrcweir // }
211cdf0e10cSrcweir //
212cdf0e10cSrcweir // if ( SUCCEEDED( hr ) )
213cdf0e10cSrcweir {
214cdf0e10cSrcweir if ( m_nInitMode == INIT_FROM_STORAGE )
215cdf0e10cSrcweir {
216cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
217cdf0e10cSrcweir ComSmart< IPersistStorage > pPersist;
218cdf0e10cSrcweir hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist );
219cdf0e10cSrcweir
220cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
221cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist && m_pStorage )
222cdf0e10cSrcweir hr = pPersist->InitNew( m_pStorage );
223cdf0e10cSrcweir }
224cdf0e10cSrcweir else if ( m_nInitMode == LOAD_FROM_STORAGE )
225cdf0e10cSrcweir {
226cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
227cdf0e10cSrcweir ComSmart< IPersistStorage > pPersist;
228cdf0e10cSrcweir hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist );
229cdf0e10cSrcweir
230cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
231cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist && m_pStorage )
232cdf0e10cSrcweir hr = pPersist->Load( m_pStorage );
233cdf0e10cSrcweir }
234cdf0e10cSrcweir else if ( m_nInitMode == LOAD_FROM_FILE )
235cdf0e10cSrcweir {
236cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
237cdf0e10cSrcweir ComSmart< IPersistFile > pPersistFile;
238cdf0e10cSrcweir hr = m_pDefHandler->QueryInterface( IID_IPersistFile, (void**)&pPersistFile );
239cdf0e10cSrcweir
240cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
241cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersistFile && m_pFileName )
242cdf0e10cSrcweir hr = pPersistFile->Load( m_pFileName, m_nFileOpenMode );
243cdf0e10cSrcweir }
244cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
245cdf0e10cSrcweir }
246cdf0e10cSrcweir }
247cdf0e10cSrcweir }
248cdf0e10cSrcweir
249cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
250cdf0e10cSrcweir if ( !SUCCEEDED( hr ) || !m_pDefHandler )
251cdf0e10cSrcweir {
252cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
253cdf0e10cSrcweir m_pDefHandler = NULL;
254cdf0e10cSrcweir return FALSE;
255cdf0e10cSrcweir }
256cdf0e10cSrcweir
257cdf0e10cSrcweir // register all the listeners new
258cdf0e10cSrcweir
259cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
260cdf0e10cSrcweir hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
261cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
262cdf0e10cSrcweir {
263cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
264cdf0e10cSrcweir if ( m_pClientSite )
265cdf0e10cSrcweir pOleObject->SetClientSite( m_pClientSite );
266cdf0e10cSrcweir
267cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
268cdf0e10cSrcweir for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ )
269cdf0e10cSrcweir if ( m_pOleAdvises[nInd] )
270cdf0e10cSrcweir {
271cdf0e10cSrcweir DWORD nRegID = 0;
272cdf0e10cSrcweir if ( SUCCEEDED( pOleObject->Advise( m_pOleAdvises[nInd], &nRegID ) ) && nRegID > 0 )
273cdf0e10cSrcweir m_pOleAdvises[nInd]->SetRegID( nRegID );
274cdf0e10cSrcweir }
275cdf0e10cSrcweir }
276cdf0e10cSrcweir
277cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
278cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
279cdf0e10cSrcweir hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
280cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
281cdf0e10cSrcweir {
282cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
283cdf0e10cSrcweir for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ )
284cdf0e10cSrcweir if ( m_pDataAdvises[nInd] )
285cdf0e10cSrcweir {
286cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
287cdf0e10cSrcweir DWORD nRegID = 0;
288cdf0e10cSrcweir if ( SUCCEEDED( pIDataObject->DAdvise( m_pDataAdvises[nInd]->GetFormatEtc(), m_pDataAdvises[nInd]->GetDataAdviseFlag(), m_pDataAdvises[nInd], &nRegID ) ) && nRegID > 0 )
289cdf0e10cSrcweir m_pDataAdvises[nInd]->SetRegID( nRegID );
290cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
291cdf0e10cSrcweir }
292cdf0e10cSrcweir }
293cdf0e10cSrcweir
294cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
295cdf0e10cSrcweir ComSmart< IViewObject > pIViewObject;
296cdf0e10cSrcweir hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject );
297cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIViewObject )
298cdf0e10cSrcweir {
299cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
300cdf0e10cSrcweir if ( m_pViewAdvise )
301cdf0e10cSrcweir pIViewObject->SetAdvise( m_pViewAdvise->GetAspect(), m_pViewAdvise->GetViewAdviseFlag(), m_pViewAdvise );
302cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
303cdf0e10cSrcweir }
304cdf0e10cSrcweir }
305cdf0e10cSrcweir
306cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::CheckDefHandler()" );
307cdf0e10cSrcweir
308cdf0e10cSrcweir return TRUE;
309cdf0e10cSrcweir }
310cdf0e10cSrcweir
311cdf0e10cSrcweir //-------------------------------------------------------------------------------
InsertAdviseLinkToList(const ComSmart<OleWrapperAdviseSink> & pOwnAdvise,ComSmart<OleWrapperAdviseSink> pAdvises[])312cdf0e10cSrcweir DWORD InprocEmbedDocument_Impl::InsertAdviseLinkToList( const ComSmart<OleWrapperAdviseSink>& pOwnAdvise, ComSmart< OleWrapperAdviseSink > pAdvises[] )
313cdf0e10cSrcweir {
314cdf0e10cSrcweir // the result should start from 1 in case of success, the element 0 can be used for own needs
315cdf0e10cSrcweir DWORD nResult = 0;
316cdf0e10cSrcweir
317cdf0e10cSrcweir if ( pOwnAdvise )
318cdf0e10cSrcweir {
319cdf0e10cSrcweir for ( DWORD nInd = 1; nInd < DEFAULT_ARRAY_LEN && nResult == 0; nInd++ )
320cdf0e10cSrcweir {
321cdf0e10cSrcweir if ( pAdvises[nInd] == pOwnAdvise )
322cdf0e10cSrcweir {
323cdf0e10cSrcweir nResult = nInd;
324cdf0e10cSrcweir }
325cdf0e10cSrcweir else if ( pAdvises[nInd] == NULL )
326cdf0e10cSrcweir {
327cdf0e10cSrcweir pAdvises[nInd] = pOwnAdvise;
328cdf0e10cSrcweir nResult = nInd;
329cdf0e10cSrcweir }
330cdf0e10cSrcweir }
331cdf0e10cSrcweir }
332cdf0e10cSrcweir
333cdf0e10cSrcweir return nResult;
334cdf0e10cSrcweir }
335cdf0e10cSrcweir
336cdf0e10cSrcweir //-------------------------------------------------------------------------------
Clean()337cdf0e10cSrcweir void InprocEmbedDocument_Impl::Clean()
338cdf0e10cSrcweir {
339cdf0e10cSrcweir m_pDefHandler = (IUnknown*)NULL;
340cdf0e10cSrcweir
341cdf0e10cSrcweir // no DisconnectOrigAdvise() call here, since it is no explicit disconnection
342cdf0e10cSrcweir for ( DWORD nInd = 0; nInd < DEFAULT_ARRAY_LEN; nInd++ )
343cdf0e10cSrcweir {
344cdf0e10cSrcweir if ( m_pOleAdvises[nInd] )
345cdf0e10cSrcweir {
346cdf0e10cSrcweir ComSmart< OleWrapperAdviseSink > pAdvise = m_pOleAdvises[nInd];
347cdf0e10cSrcweir m_pOleAdvises[nInd] = NULL;
348cdf0e10cSrcweir }
349cdf0e10cSrcweir
350cdf0e10cSrcweir if ( m_pDataAdvises[nInd] )
351cdf0e10cSrcweir {
352cdf0e10cSrcweir ComSmart< OleWrapperAdviseSink > pAdvise = m_pDataAdvises[nInd];
353cdf0e10cSrcweir m_pDataAdvises[nInd] = NULL;
354cdf0e10cSrcweir }
355cdf0e10cSrcweir }
356cdf0e10cSrcweir
357cdf0e10cSrcweir m_pViewAdvise = NULL;
358cdf0e10cSrcweir
359cdf0e10cSrcweir m_nInitMode = NOINIT;
360cdf0e10cSrcweir m_pStorage = NULL;
361cdf0e10cSrcweir
362cdf0e10cSrcweir if ( m_pOleContainer )
363cdf0e10cSrcweir {
364cdf0e10cSrcweir m_pOleContainer->LockContainer( FALSE );
365cdf0e10cSrcweir m_pOleContainer = NULL;
366cdf0e10cSrcweir }
367cdf0e10cSrcweir
368cdf0e10cSrcweir m_pClientSite = NULL;
369cdf0e10cSrcweir
370cdf0e10cSrcweir m_nFileOpenMode = 0;
371cdf0e10cSrcweir if ( m_pFileName )
372cdf0e10cSrcweir {
373cdf0e10cSrcweir delete m_pFileName;
374cdf0e10cSrcweir m_pFileName = NULL;
375cdf0e10cSrcweir }
376cdf0e10cSrcweir }
377cdf0e10cSrcweir
378cdf0e10cSrcweir // IUnknown
379cdf0e10cSrcweir //-------------------------------------------------------------------------------
QueryInterface(REFIID riid,void FAR * FAR * ppv)380cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::QueryInterface( REFIID riid, void FAR* FAR* ppv )
381cdf0e10cSrcweir {
382cdf0e10cSrcweir if(IsEqualIID(riid, IID_IUnknown))
383cdf0e10cSrcweir {
384cdf0e10cSrcweir AddRef();
385cdf0e10cSrcweir *ppv = (IUnknown*) (IPersistStorage*) this;
386cdf0e10cSrcweir return S_OK;
387cdf0e10cSrcweir }
388cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IPersist))
389cdf0e10cSrcweir {
390cdf0e10cSrcweir AddRef();
391cdf0e10cSrcweir *ppv = (IPersist*) (IPersistStorage*) this;
392cdf0e10cSrcweir return S_OK;
393cdf0e10cSrcweir }
394cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IPersistStorage))
395cdf0e10cSrcweir {
396cdf0e10cSrcweir AddRef();
397cdf0e10cSrcweir *ppv = (IPersistStorage*) this;
398cdf0e10cSrcweir return S_OK;
399cdf0e10cSrcweir }
400cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IDataObject))
401cdf0e10cSrcweir {
402cdf0e10cSrcweir AddRef();
403cdf0e10cSrcweir *ppv = (IDataObject*) this;
404cdf0e10cSrcweir return S_OK;
405cdf0e10cSrcweir }
406cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IOleObject))
407cdf0e10cSrcweir {
408cdf0e10cSrcweir AddRef();
409cdf0e10cSrcweir *ppv = (IOleObject*) this;
410cdf0e10cSrcweir return S_OK;
411cdf0e10cSrcweir }
412cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IPersistFile))
413cdf0e10cSrcweir {
414cdf0e10cSrcweir AddRef();
415cdf0e10cSrcweir *ppv = (IPersistFile*) this;
416cdf0e10cSrcweir return S_OK;
417cdf0e10cSrcweir }
418cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IRunnableObject))
419cdf0e10cSrcweir {
420cdf0e10cSrcweir AddRef();
421cdf0e10cSrcweir *ppv = (IRunnableObject*) this;
422cdf0e10cSrcweir return S_OK;
423cdf0e10cSrcweir }
424cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IViewObject))
425cdf0e10cSrcweir {
426cdf0e10cSrcweir AddRef();
427cdf0e10cSrcweir *ppv = (IViewObject*) this;
428cdf0e10cSrcweir return S_OK;
429cdf0e10cSrcweir }
430cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IViewObject2))
431cdf0e10cSrcweir {
432cdf0e10cSrcweir AddRef();
433cdf0e10cSrcweir *ppv = (IViewObject2*) this;
434cdf0e10cSrcweir return S_OK;
435cdf0e10cSrcweir }
436cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IOleCache))
437cdf0e10cSrcweir {
438cdf0e10cSrcweir AddRef();
439cdf0e10cSrcweir *ppv = (IOleCache*) &m_aInternalCache;
440cdf0e10cSrcweir return S_OK;
441cdf0e10cSrcweir }
442cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IOleCache2))
443cdf0e10cSrcweir {
444cdf0e10cSrcweir AddRef();
445cdf0e10cSrcweir *ppv = (IOleCache2*) &m_aInternalCache;
446cdf0e10cSrcweir return S_OK;
447cdf0e10cSrcweir }
448cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IOleWindow))
449cdf0e10cSrcweir {
450cdf0e10cSrcweir AddRef();
451cdf0e10cSrcweir *ppv = (IOleWindow*) this;
452cdf0e10cSrcweir return S_OK;
453cdf0e10cSrcweir }
454cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IOleInPlaceObject))
455cdf0e10cSrcweir {
456cdf0e10cSrcweir AddRef();
457cdf0e10cSrcweir *ppv = (IOleInPlaceObject*) this;
458cdf0e10cSrcweir return S_OK;
459cdf0e10cSrcweir }
460cdf0e10cSrcweir else if (IsEqualIID(riid, IID_IDispatch))
461cdf0e10cSrcweir {
462cdf0e10cSrcweir AddRef();
463cdf0e10cSrcweir *ppv = (IDispatch*) this;
464cdf0e10cSrcweir return S_OK;
465cdf0e10cSrcweir }
466cdf0e10cSrcweir
467cdf0e10cSrcweir *ppv = NULL;
468cdf0e10cSrcweir return ResultFromScode(E_NOINTERFACE);
469cdf0e10cSrcweir }
470cdf0e10cSrcweir
471cdf0e10cSrcweir //-------------------------------------------------------------------------------
STDMETHODIMP_(ULONG)472cdf0e10cSrcweir STDMETHODIMP_(ULONG) InprocEmbedDocument_Impl::AddRef()
473cdf0e10cSrcweir {
474cdf0e10cSrcweir return ++m_refCount;
475cdf0e10cSrcweir }
476cdf0e10cSrcweir
477cdf0e10cSrcweir //-------------------------------------------------------------------------------
STDMETHODIMP_(ULONG)478cdf0e10cSrcweir STDMETHODIMP_(ULONG) InprocEmbedDocument_Impl::Release()
479cdf0e10cSrcweir {
480cdf0e10cSrcweir // unfortunately there are reentrance problems in mfc that have to be workarounded
481cdf0e10cSrcweir sal_Int32 nCount = m_refCount > 0 ? --m_refCount : 0;
482cdf0e10cSrcweir if ( nCount == 0 && !m_bDeleted )
483cdf0e10cSrcweir {
484cdf0e10cSrcweir // deleting of this object can trigger deleting of mfc objects that will try to delete this object one more time
485cdf0e10cSrcweir m_bDeleted = TRUE;
486cdf0e10cSrcweir
487cdf0e10cSrcweir Clean();
488cdf0e10cSrcweir delete this;
489cdf0e10cSrcweir }
490cdf0e10cSrcweir return nCount;
491cdf0e10cSrcweir }
492cdf0e10cSrcweir
493cdf0e10cSrcweir // IPersist
494cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetClassID(CLSID * pClassId)495cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetClassID( CLSID* pClassId )
496cdf0e10cSrcweir {
497cdf0e10cSrcweir *pClassId = *&m_guid;
498cdf0e10cSrcweir return S_OK;
499cdf0e10cSrcweir }
500cdf0e10cSrcweir
501cdf0e10cSrcweir // IPersistStorage
502cdf0e10cSrcweir //-------------------------------------------------------------------------------
IsDirty()503cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::IsDirty()
504cdf0e10cSrcweir {
505cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::IsDirty()1" );
506cdf0e10cSrcweir if ( m_pDefHandler == NULL || m_pOleAdvises[0] == NULL || m_pOleAdvises[0]->IsClosed() )
507cdf0e10cSrcweir return S_FALSE;
508cdf0e10cSrcweir
509cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::IsDirty()2" );
510cdf0e10cSrcweir if ( CheckDefHandler() )
511cdf0e10cSrcweir {
512cdf0e10cSrcweir ComSmart< IPersistStorage > pPersist;
513cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist );
514cdf0e10cSrcweir
515cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
516cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
517cdf0e10cSrcweir return pPersist->IsDirty();
518cdf0e10cSrcweir }
519cdf0e10cSrcweir
520cdf0e10cSrcweir return E_FAIL;
521cdf0e10cSrcweir }
522cdf0e10cSrcweir
523cdf0e10cSrcweir //-------------------------------------------------------------------------------
InitNew(IStorage * pStg)524cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InitNew( IStorage *pStg )
525cdf0e10cSrcweir {
526cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::InitNew( IStorage *pStg )" );
527cdf0e10cSrcweir if ( CheckDefHandler() )
528cdf0e10cSrcweir {
529cdf0e10cSrcweir ComSmart< IPersistStorage > pPersist;
530cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist );
531cdf0e10cSrcweir
532cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
533cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
534cdf0e10cSrcweir {
535cdf0e10cSrcweir hr = pPersist->InitNew( pStg );
536cdf0e10cSrcweir if ( SUCCEEDED( hr ) )
537cdf0e10cSrcweir {
538cdf0e10cSrcweir m_nInitMode = INIT_FROM_STORAGE;
539cdf0e10cSrcweir m_pStorage = pStg;
540cdf0e10cSrcweir
541cdf0e10cSrcweir m_nFileOpenMode = 0;
542cdf0e10cSrcweir if ( m_pFileName )
543cdf0e10cSrcweir {
544cdf0e10cSrcweir delete[] m_pFileName;
545cdf0e10cSrcweir m_pFileName = NULL;
546cdf0e10cSrcweir }
547cdf0e10cSrcweir }
548cdf0e10cSrcweir
549cdf0e10cSrcweir return hr;
550cdf0e10cSrcweir }
551cdf0e10cSrcweir }
552cdf0e10cSrcweir
553cdf0e10cSrcweir return E_FAIL;
554cdf0e10cSrcweir }
555cdf0e10cSrcweir
556cdf0e10cSrcweir //-------------------------------------------------------------------------------
Load(IStorage * pStg)557cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Load( IStorage *pStg )
558cdf0e10cSrcweir {
559cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Load( IStorage *pStg )" );
560cdf0e10cSrcweir if ( CheckDefHandler() )
561cdf0e10cSrcweir {
562cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Load( IStorage *pStg )" );
563cdf0e10cSrcweir ComSmart< IPersistStorage > pPersist;
564cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist );
565cdf0e10cSrcweir
566cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
567cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
568cdf0e10cSrcweir {
569cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Load( IStorage *pStg )" );
570cdf0e10cSrcweir hr = pPersist->Load( pStg );
571cdf0e10cSrcweir if ( SUCCEEDED( hr ) )
572cdf0e10cSrcweir {
573cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Load( IStorage *pStg )" );
574cdf0e10cSrcweir m_nInitMode = LOAD_FROM_STORAGE;
575cdf0e10cSrcweir m_pStorage = pStg;
576cdf0e10cSrcweir
577cdf0e10cSrcweir m_nFileOpenMode = 0;
578cdf0e10cSrcweir if ( m_pFileName )
579cdf0e10cSrcweir {
580cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Load( IStorage *pStg )" );
581cdf0e10cSrcweir delete[] m_pFileName;
582cdf0e10cSrcweir m_pFileName = NULL;
583cdf0e10cSrcweir }
584cdf0e10cSrcweir }
585cdf0e10cSrcweir
586cdf0e10cSrcweir return hr;
587cdf0e10cSrcweir }
588cdf0e10cSrcweir }
589cdf0e10cSrcweir
590cdf0e10cSrcweir return E_FAIL;
591cdf0e10cSrcweir }
592cdf0e10cSrcweir
593cdf0e10cSrcweir //-------------------------------------------------------------------------------
Save(IStorage * pStgSave,BOOL fSameAsLoad)594cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Save( IStorage *pStgSave, BOOL fSameAsLoad )
595cdf0e10cSrcweir {
596cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Save( IStorage *pStgSave, BOOL fSameAsLoad )" );
597cdf0e10cSrcweir if ( fSameAsLoad && ( m_pDefHandler == NULL || m_pOleAdvises[0] == NULL || m_pOleAdvises[0]->IsClosed() ) )
598cdf0e10cSrcweir return S_OK;
599cdf0e10cSrcweir
600cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Save( IStorage *pStgSave, BOOL fSameAsLoad )" );
601cdf0e10cSrcweir if ( CheckDefHandler() )
602cdf0e10cSrcweir {
603cdf0e10cSrcweir ComSmart< IPersistStorage > pPersist;
604cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist );
605cdf0e10cSrcweir
606cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
607cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
608cdf0e10cSrcweir return pPersist->Save( pStgSave, fSameAsLoad );
609cdf0e10cSrcweir }
610cdf0e10cSrcweir
611cdf0e10cSrcweir return E_FAIL;
612cdf0e10cSrcweir }
613cdf0e10cSrcweir
614cdf0e10cSrcweir //-------------------------------------------------------------------------------
SaveCompleted(IStorage * pStgNew)615cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SaveCompleted( IStorage *pStgNew )
616cdf0e10cSrcweir {
617cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SaveCompleted( IStorage *pStgNew )" );
618cdf0e10cSrcweir if ( m_pDefHandler == NULL || m_pOleAdvises[0] == NULL || m_pOleAdvises[0]->IsClosed() )
619cdf0e10cSrcweir {
620cdf0e10cSrcweir if ( pStgNew )
621cdf0e10cSrcweir m_pStorage = pStgNew;
622cdf0e10cSrcweir
623cdf0e10cSrcweir return S_OK;
624cdf0e10cSrcweir }
625cdf0e10cSrcweir
626cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SaveCompleted( IStorage *pStgNew )" );
627cdf0e10cSrcweir if ( CheckDefHandler() )
628cdf0e10cSrcweir {
629cdf0e10cSrcweir ComSmart< IPersistStorage > pPersist;
630cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist );
631cdf0e10cSrcweir
632cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
633cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
634cdf0e10cSrcweir {
635cdf0e10cSrcweir hr = pPersist->SaveCompleted( pStgNew );
636cdf0e10cSrcweir if ( SUCCEEDED( hr ) )
637cdf0e10cSrcweir {
638cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SaveCompleted( IStorage *pStgNew )" );
639cdf0e10cSrcweir m_nInitMode = LOAD_FROM_STORAGE;
640cdf0e10cSrcweir if ( pStgNew )
641cdf0e10cSrcweir {
642cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SaveCompleted( IStorage *pStgNew )" );
643cdf0e10cSrcweir m_pStorage = pStgNew;
644cdf0e10cSrcweir }
645cdf0e10cSrcweir
646cdf0e10cSrcweir m_nFileOpenMode = 0;
647cdf0e10cSrcweir if ( m_pFileName )
648cdf0e10cSrcweir {
649cdf0e10cSrcweir delete[] m_pFileName;
650cdf0e10cSrcweir m_pFileName = NULL;
651cdf0e10cSrcweir }
652cdf0e10cSrcweir }
653cdf0e10cSrcweir
654cdf0e10cSrcweir return hr;
655cdf0e10cSrcweir }
656cdf0e10cSrcweir }
657cdf0e10cSrcweir
658cdf0e10cSrcweir return E_FAIL;
659cdf0e10cSrcweir }
660cdf0e10cSrcweir
661cdf0e10cSrcweir //-------------------------------------------------------------------------------
HandsOffStorage()662cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::HandsOffStorage()
663cdf0e10cSrcweir {
664cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::HandsOffStorage()" );
665cdf0e10cSrcweir if ( CheckDefHandler() )
666cdf0e10cSrcweir {
667cdf0e10cSrcweir ComSmart< IPersistStorage > pPersist;
668cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistStorage, (void**)&pPersist );
669cdf0e10cSrcweir
670cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
671cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
672cdf0e10cSrcweir {
673cdf0e10cSrcweir hr = pPersist->HandsOffStorage();
674cdf0e10cSrcweir if ( SUCCEEDED( hr ) )
675cdf0e10cSrcweir {
676cdf0e10cSrcweir m_pStorage = NULL;
677cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::HandsOffStorage()" );
678cdf0e10cSrcweir }
679cdf0e10cSrcweir
680cdf0e10cSrcweir return hr;
681cdf0e10cSrcweir }
682cdf0e10cSrcweir }
683cdf0e10cSrcweir
684cdf0e10cSrcweir return E_FAIL;
685cdf0e10cSrcweir }
686cdf0e10cSrcweir
687cdf0e10cSrcweir // IPersistFile
688cdf0e10cSrcweir //-------------------------------------------------------------------------------
Load(LPCOLESTR pszFileName,DWORD dwMode)689cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Load( LPCOLESTR pszFileName, DWORD dwMode )
690cdf0e10cSrcweir {
691cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Load( LPCOLESTR pszFileName, DWORD dwMode )" );
692cdf0e10cSrcweir if ( CheckDefHandler() && pszFileName )
693cdf0e10cSrcweir {
694cdf0e10cSrcweir ComSmart< IPersistFile > pPersist;
695cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, (void**)&pPersist );
696cdf0e10cSrcweir
697cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
698cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
699cdf0e10cSrcweir {
700cdf0e10cSrcweir hr = pPersist->Load( pszFileName, dwMode );
701cdf0e10cSrcweir if ( SUCCEEDED( hr ) )
702cdf0e10cSrcweir {
703cdf0e10cSrcweir m_nInitMode = LOAD_FROM_FILE;
704cdf0e10cSrcweir if ( m_pStorage )
705cdf0e10cSrcweir m_pStorage = NULL;
706cdf0e10cSrcweir
707cdf0e10cSrcweir m_nFileOpenMode = dwMode;
708cdf0e10cSrcweir // copy the string
709cdf0e10cSrcweir SetName( pszFileName, m_pFileName );
710cdf0e10cSrcweir }
711cdf0e10cSrcweir
712cdf0e10cSrcweir return hr;
713cdf0e10cSrcweir }
714cdf0e10cSrcweir }
715cdf0e10cSrcweir
716cdf0e10cSrcweir return E_FAIL;
717cdf0e10cSrcweir }
718cdf0e10cSrcweir
719cdf0e10cSrcweir //-------------------------------------------------------------------------------
Save(LPCOLESTR pszFileName,BOOL fRemember)720cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Save( LPCOLESTR pszFileName, BOOL fRemember )
721cdf0e10cSrcweir {
722cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Save( LPCOLESTR pszFileName, BOOL fRemember )" );
723cdf0e10cSrcweir if ( CheckDefHandler() )
724cdf0e10cSrcweir {
725cdf0e10cSrcweir ComSmart< IPersistFile > pPersist;
726cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, (void**)&pPersist );
727cdf0e10cSrcweir
728cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
729cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
730cdf0e10cSrcweir return pPersist->Save( pszFileName, fRemember );
731cdf0e10cSrcweir }
732cdf0e10cSrcweir
733cdf0e10cSrcweir return E_FAIL;
734cdf0e10cSrcweir }
735cdf0e10cSrcweir
736cdf0e10cSrcweir //-------------------------------------------------------------------------------
SaveCompleted(LPCOLESTR pszFileName)737cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SaveCompleted( LPCOLESTR pszFileName )
738cdf0e10cSrcweir {
739cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SaveCompleted( LPCOLESTR pszFileName )" );
740cdf0e10cSrcweir if ( CheckDefHandler() )
741cdf0e10cSrcweir {
742cdf0e10cSrcweir ComSmart< IPersistFile > pPersist;
743cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, (void**)&pPersist );
744cdf0e10cSrcweir
745cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
746cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
747cdf0e10cSrcweir {
748cdf0e10cSrcweir hr = pPersist->SaveCompleted( pszFileName );
749cdf0e10cSrcweir if ( SUCCEEDED( hr ) )
750cdf0e10cSrcweir {
751cdf0e10cSrcweir m_nInitMode = LOAD_FROM_STORAGE;
752cdf0e10cSrcweir if ( m_pStorage )
753cdf0e10cSrcweir m_pStorage = NULL;
754cdf0e10cSrcweir
755cdf0e10cSrcweir m_nFileOpenMode = STGM_READWRITE; // was just written
756cdf0e10cSrcweir // copy the string
757cdf0e10cSrcweir SetName( pszFileName, m_pFileName );
758cdf0e10cSrcweir }
759cdf0e10cSrcweir }
760cdf0e10cSrcweir
761cdf0e10cSrcweir }
762cdf0e10cSrcweir
763cdf0e10cSrcweir return E_FAIL;
764cdf0e10cSrcweir }
765cdf0e10cSrcweir
766cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetCurFile(LPOLESTR * ppszFileName)767cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetCurFile( LPOLESTR *ppszFileName )
768cdf0e10cSrcweir {
769cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetCurFile( LPOLESTR *ppszFileName )" );
770cdf0e10cSrcweir if ( CheckDefHandler() )
771cdf0e10cSrcweir {
772cdf0e10cSrcweir ComSmart< IPersistFile > pPersist;
773cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IPersistFile, (void**)&pPersist );
774cdf0e10cSrcweir
775cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
776cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pPersist )
777cdf0e10cSrcweir return pPersist->GetCurFile( ppszFileName );
778cdf0e10cSrcweir }
779cdf0e10cSrcweir
780cdf0e10cSrcweir return E_FAIL;
781cdf0e10cSrcweir }
782cdf0e10cSrcweir
783cdf0e10cSrcweir // IOleObject
784cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetClientSite(IOleClientSite * pSite)785cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SetClientSite( IOleClientSite* pSite )
786cdf0e10cSrcweir {
787cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SetClientSite( IOleClientSite* pSite )" );
788cdf0e10cSrcweir if ( pSite == m_pClientSite )
789cdf0e10cSrcweir return S_OK;
790cdf0e10cSrcweir
791cdf0e10cSrcweir if ( !pSite )
792cdf0e10cSrcweir {
793cdf0e10cSrcweir m_pClientSite = NULL;
794cdf0e10cSrcweir if ( m_pOleContainer )
795cdf0e10cSrcweir {
796cdf0e10cSrcweir m_pOleContainer->LockContainer( FALSE );
797cdf0e10cSrcweir m_pOleContainer = NULL;
798cdf0e10cSrcweir }
799cdf0e10cSrcweir }
800cdf0e10cSrcweir
801cdf0e10cSrcweir if ( CheckDefHandler() )
802cdf0e10cSrcweir {
803cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
804cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
805cdf0e10cSrcweir
806cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
807cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
808cdf0e10cSrcweir {
809cdf0e10cSrcweir HRESULT hr = pOleObject->SetClientSite( pSite );
810cdf0e10cSrcweir if ( SUCCEEDED( hr ) )
811cdf0e10cSrcweir {
812cdf0e10cSrcweir m_pClientSite = pSite;
813cdf0e10cSrcweir
814cdf0e10cSrcweir if ( m_pOleContainer )
815cdf0e10cSrcweir {
816cdf0e10cSrcweir m_pOleContainer->LockContainer( FALSE );
817cdf0e10cSrcweir m_pOleContainer = NULL;
818cdf0e10cSrcweir }
819cdf0e10cSrcweir
820cdf0e10cSrcweir m_pClientSite->GetContainer( &m_pOleContainer );
821cdf0e10cSrcweir if ( m_pOleContainer )
822cdf0e10cSrcweir m_pOleContainer->LockContainer( TRUE );
823cdf0e10cSrcweir }
824cdf0e10cSrcweir
825cdf0e10cSrcweir return hr;
826cdf0e10cSrcweir }
827cdf0e10cSrcweir }
828cdf0e10cSrcweir
829cdf0e10cSrcweir return E_FAIL;
830cdf0e10cSrcweir }
831cdf0e10cSrcweir
832cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetClientSite(IOleClientSite ** pSite)833cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetClientSite( IOleClientSite** pSite )
834cdf0e10cSrcweir {
835cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetClientSite( IOleClientSite** pSite )" );
836cdf0e10cSrcweir if ( CheckDefHandler() )
837cdf0e10cSrcweir {
838cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
839cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
840cdf0e10cSrcweir
841cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
842cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
843cdf0e10cSrcweir return pOleObject->GetClientSite( pSite );
844cdf0e10cSrcweir }
845cdf0e10cSrcweir
846cdf0e10cSrcweir return E_FAIL;
847cdf0e10cSrcweir }
848cdf0e10cSrcweir
849cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetHostNames(LPCOLESTR szContainerApp,LPCOLESTR szContainerObj)850cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SetHostNames( LPCOLESTR szContainerApp, LPCOLESTR szContainerObj )
851cdf0e10cSrcweir {
852cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SetHostNames( LPCOLESTR szContainerApp, LPCOLESTR szContainerObj )" );
853cdf0e10cSrcweir
854cdf0e10cSrcweir if ( CheckDefHandler() )
855cdf0e10cSrcweir {
856cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
857cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
858cdf0e10cSrcweir
859cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
860cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
861cdf0e10cSrcweir {
862cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SetHostNames( LPCOLESTR szContainerApp, LPCOLESTR szContainerObj )" );
863cdf0e10cSrcweir hr = pOleObject->SetHostNames( szContainerApp, szContainerObj );
864cdf0e10cSrcweir }
865cdf0e10cSrcweir }
866cdf0e10cSrcweir
867cdf0e10cSrcweir return S_OK;
868cdf0e10cSrcweir }
869cdf0e10cSrcweir
870cdf0e10cSrcweir //-------------------------------------------------------------------------------
Close(DWORD dwSaveOption)871cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Close( DWORD dwSaveOption )
872cdf0e10cSrcweir {
873cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Close( DWORD dwSaveOption )" );
874cdf0e10cSrcweir if ( m_pDefHandler && CheckDefHandler() )
875cdf0e10cSrcweir {
876cdf0e10cSrcweir // no need to close if there is no default handler.
877cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
878cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
879cdf0e10cSrcweir
880cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
881cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
882cdf0e10cSrcweir {
883cdf0e10cSrcweir hr = pOleObject->Close( dwSaveOption );
884cdf0e10cSrcweir hr = CoDisconnectObject( (IUnknown*)(IPersistStorage*)this, 0 );
885cdf0e10cSrcweir }
886cdf0e10cSrcweir }
887cdf0e10cSrcweir
888cdf0e10cSrcweir // if the object is closed from outside that means that it should go to uninitialized state
889cdf0e10cSrcweir Clean();
890cdf0e10cSrcweir
891cdf0e10cSrcweir return S_OK;
892cdf0e10cSrcweir }
893cdf0e10cSrcweir
894cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetMoniker(DWORD dwWhichMoniker,IMoniker * pmk)895cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SetMoniker( DWORD dwWhichMoniker, IMoniker * pmk )
896cdf0e10cSrcweir {
897cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SetMoniker( DWORD dwWhichMoniker, IMoniker * pmk )" );
898cdf0e10cSrcweir if ( CheckDefHandler() )
899cdf0e10cSrcweir {
900cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
901cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
902cdf0e10cSrcweir
903cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
904cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
905cdf0e10cSrcweir return pOleObject->SetMoniker( dwWhichMoniker, pmk );
906cdf0e10cSrcweir }
907cdf0e10cSrcweir
908cdf0e10cSrcweir return E_FAIL;
909cdf0e10cSrcweir }
910cdf0e10cSrcweir
911cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetMoniker(DWORD dwAssign,DWORD dwWhichMoniker,IMoniker ** ppmk)912cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetMoniker( DWORD dwAssign, DWORD dwWhichMoniker, IMoniker ** ppmk )
913cdf0e10cSrcweir {
914cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetMoniker( DWORD dwAssign, DWORD dwWhichMoniker, IMoniker ** ppmk )" );
915cdf0e10cSrcweir if ( CheckDefHandler() )
916cdf0e10cSrcweir {
917cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
918cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
919cdf0e10cSrcweir
920cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
921cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
922cdf0e10cSrcweir return pOleObject->GetMoniker( dwAssign, dwWhichMoniker, ppmk );
923cdf0e10cSrcweir }
924cdf0e10cSrcweir
925cdf0e10cSrcweir return E_FAIL;
926cdf0e10cSrcweir }
927cdf0e10cSrcweir
928cdf0e10cSrcweir //-------------------------------------------------------------------------------
InitFromData(IDataObject * pDataObject,BOOL fCreation,DWORD dwReserved)929cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InitFromData( IDataObject * pDataObject, BOOL fCreation, DWORD dwReserved )
930cdf0e10cSrcweir {
931cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::InitFromData( IDataObject * pDataObject, BOOL fCreation, DWORD dwReserved )" );
932cdf0e10cSrcweir if ( CheckDefHandler() )
933cdf0e10cSrcweir {
934cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
935cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
936cdf0e10cSrcweir
937cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
938cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
939cdf0e10cSrcweir return pOleObject->InitFromData( pDataObject, fCreation, dwReserved );
940cdf0e10cSrcweir }
941cdf0e10cSrcweir
942cdf0e10cSrcweir return E_FAIL;
943cdf0e10cSrcweir }
944cdf0e10cSrcweir
945cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetClipboardData(DWORD dwReserved,IDataObject ** ppDataObject)946cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetClipboardData( DWORD dwReserved, IDataObject ** ppDataObject )
947cdf0e10cSrcweir {
948cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetClipboardData( DWORD dwReserved, IDataObject ** ppDataObject )" );
949cdf0e10cSrcweir if ( CheckDefHandler() )
950cdf0e10cSrcweir {
951cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
952cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
953cdf0e10cSrcweir
954cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
955cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
956cdf0e10cSrcweir return pOleObject->GetClipboardData( dwReserved, ppDataObject );
957cdf0e10cSrcweir }
958cdf0e10cSrcweir
959cdf0e10cSrcweir return E_FAIL;
960cdf0e10cSrcweir }
961cdf0e10cSrcweir
962cdf0e10cSrcweir //-------------------------------------------------------------------------------
DoVerb(LONG iVerb,LPMSG pMsg,IOleClientSite * pActiveSite,LONG nLong,HWND hWin,LPCRECT pRect)963cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::DoVerb(
964cdf0e10cSrcweir LONG iVerb,
965cdf0e10cSrcweir LPMSG pMsg,
966cdf0e10cSrcweir IOleClientSite *pActiveSite,
967cdf0e10cSrcweir LONG nLong,
968cdf0e10cSrcweir HWND hWin,
969cdf0e10cSrcweir LPCRECT pRect )
970cdf0e10cSrcweir {
971cdf0e10cSrcweir WRITEDEBUGINFO( "DoVerb" );
972cdf0e10cSrcweir if ( CheckDefHandler() )
973cdf0e10cSrcweir {
974cdf0e10cSrcweir WRITEDEBUGINFO( "DoVerb" MY_STRING_LINE "n" );
975cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
976cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
977cdf0e10cSrcweir
978cdf0e10cSrcweir WRITEDEBUGINFO( "DoVerb" );
979cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
980cdf0e10cSrcweir WRITEDEBUGINFO( "DoVerb" );
981cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
982cdf0e10cSrcweir {
983cdf0e10cSrcweir WRITEDEBUGINFO( "DoVerb" );
984cdf0e10cSrcweir hr = pOleObject->DoVerb( iVerb, pMsg, pActiveSite, nLong, hWin, pRect );
985cdf0e10cSrcweir if ( SUCCEEDED( hr ) )
986cdf0e10cSrcweir {
987cdf0e10cSrcweir WRITEDEBUGINFO( "DoVerb" );
988cdf0e10cSrcweir }
989cdf0e10cSrcweir
990cdf0e10cSrcweir return hr;
991cdf0e10cSrcweir }
992cdf0e10cSrcweir
993cdf0e10cSrcweir WRITEDEBUGINFO( "DoVerb" );
994cdf0e10cSrcweir }
995cdf0e10cSrcweir
996cdf0e10cSrcweir return E_FAIL;
997cdf0e10cSrcweir }
998cdf0e10cSrcweir
999cdf0e10cSrcweir //-------------------------------------------------------------------------------
EnumVerbs(IEnumOLEVERB ** ppEnumOleVerb)1000cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::EnumVerbs( IEnumOLEVERB ** ppEnumOleVerb )
1001cdf0e10cSrcweir {
1002cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::EnumVerbs( IEnumOLEVERB ** ppEnumOleVerb )" );
1003cdf0e10cSrcweir if ( CheckDefHandler() )
1004cdf0e10cSrcweir {
1005cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
1006cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1007cdf0e10cSrcweir
1008cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1009cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
1010cdf0e10cSrcweir return pOleObject->EnumVerbs( ppEnumOleVerb );
1011cdf0e10cSrcweir }
1012cdf0e10cSrcweir
1013cdf0e10cSrcweir return E_FAIL;
1014cdf0e10cSrcweir }
1015cdf0e10cSrcweir
1016cdf0e10cSrcweir //-------------------------------------------------------------------------------
Update()1017cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Update()
1018cdf0e10cSrcweir {
1019cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Update()" );
1020cdf0e10cSrcweir
1021cdf0e10cSrcweir if ( m_pDefHandler && CheckDefHandler() )
1022cdf0e10cSrcweir {
1023cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
1024cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1025cdf0e10cSrcweir
1026cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1027cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
1028cdf0e10cSrcweir return pOleObject->Update();
1029cdf0e10cSrcweir }
1030cdf0e10cSrcweir
1031cdf0e10cSrcweir return S_OK;
1032cdf0e10cSrcweir }
1033cdf0e10cSrcweir
1034cdf0e10cSrcweir //-------------------------------------------------------------------------------
IsUpToDate()1035cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::IsUpToDate()
1036cdf0e10cSrcweir {
1037cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::IsUpToDate()" );
1038cdf0e10cSrcweir if ( CheckDefHandler() )
1039cdf0e10cSrcweir {
1040cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
1041cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1042cdf0e10cSrcweir
1043cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1044cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
1045cdf0e10cSrcweir return pOleObject->IsUpToDate();
1046cdf0e10cSrcweir }
1047cdf0e10cSrcweir
1048cdf0e10cSrcweir return E_FAIL;
1049cdf0e10cSrcweir }
1050cdf0e10cSrcweir
1051cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetUserClassID(CLSID * pClsid)1052cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetUserClassID( CLSID *pClsid )
1053cdf0e10cSrcweir {
1054cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetUserClassID( CLSID *pClsid )" );
1055cdf0e10cSrcweir if ( pClsid )
1056cdf0e10cSrcweir *pClsid = m_guid;
1057cdf0e10cSrcweir
1058cdf0e10cSrcweir return S_OK;
1059cdf0e10cSrcweir }
1060cdf0e10cSrcweir
1061cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetUserType(DWORD dwFormOfType,LPOLESTR * pszUserType)1062cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetUserType( DWORD dwFormOfType, LPOLESTR * pszUserType )
1063cdf0e10cSrcweir {
1064cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetUserType( DWORD dwFormOfType, LPOLESTR * pszUserType )" );
1065cdf0e10cSrcweir if ( CheckDefHandler() )
1066cdf0e10cSrcweir {
1067cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
1068cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1069cdf0e10cSrcweir
1070cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1071cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
1072cdf0e10cSrcweir return pOleObject->GetUserType( dwFormOfType, pszUserType );
1073cdf0e10cSrcweir }
1074cdf0e10cSrcweir
1075cdf0e10cSrcweir return E_FAIL;
1076cdf0e10cSrcweir }
1077cdf0e10cSrcweir
1078cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetExtent(DWORD dwDrawAspect,SIZEL * psizel)1079cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SetExtent( DWORD dwDrawAspect, SIZEL *psizel )
1080cdf0e10cSrcweir {
1081cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SetExtent( DWORD dwDrawAspect, SIZEL *psizel )" );
1082cdf0e10cSrcweir if ( CheckDefHandler() )
1083cdf0e10cSrcweir {
1084cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
1085cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1086cdf0e10cSrcweir
1087cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1088cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
1089cdf0e10cSrcweir return pOleObject->SetExtent( dwDrawAspect, psizel );
1090cdf0e10cSrcweir }
1091cdf0e10cSrcweir
1092cdf0e10cSrcweir return E_FAIL;
1093cdf0e10cSrcweir }
1094cdf0e10cSrcweir
1095cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetExtent(DWORD dwDrawAspect,SIZEL * psizel)1096cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetExtent( DWORD dwDrawAspect, SIZEL * psizel )
1097cdf0e10cSrcweir {
1098cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetExtent( DWORD dwDrawAspect, SIZEL * psizel )" );
1099cdf0e10cSrcweir if ( CheckDefHandler() )
1100cdf0e10cSrcweir {
1101cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
1102cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1103cdf0e10cSrcweir
1104cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1105cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
1106cdf0e10cSrcweir return pOleObject->GetExtent( dwDrawAspect, psizel );
1107cdf0e10cSrcweir }
1108cdf0e10cSrcweir
1109cdf0e10cSrcweir return E_FAIL;
1110cdf0e10cSrcweir }
1111cdf0e10cSrcweir
1112cdf0e10cSrcweir //-------------------------------------------------------------------------------
Advise(IAdviseSink * pAdvSink,DWORD * pdwConnection)1113cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Advise( IAdviseSink *pAdvSink, DWORD *pdwConnection )
1114cdf0e10cSrcweir {
1115cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Advise( IAdviseSink *pAdvSink, DWORD *pdwConnection )" );
1116cdf0e10cSrcweir
1117cdf0e10cSrcweir if ( !pdwConnection )
1118cdf0e10cSrcweir return E_FAIL;
1119cdf0e10cSrcweir
1120cdf0e10cSrcweir // CheckDefHandler will set the listener, avoid reusing of old listener
1121cdf0e10cSrcweir if ( DEFAULT_ARRAY_LEN > *pdwConnection && *pdwConnection > 0 && m_pOleAdvises[*pdwConnection] )
1122cdf0e10cSrcweir {
1123cdf0e10cSrcweir m_pOleAdvises[*pdwConnection]->DisconnectOrigAdvise();
1124cdf0e10cSrcweir m_pOleAdvises[*pdwConnection] = NULL;
1125cdf0e10cSrcweir }
1126cdf0e10cSrcweir
1127cdf0e10cSrcweir if ( pAdvSink && CheckDefHandler() )
1128cdf0e10cSrcweir {
1129cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
1130cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1131cdf0e10cSrcweir
1132cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1133cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
1134cdf0e10cSrcweir {
1135cdf0e10cSrcweir ComSmart< OleWrapperAdviseSink > pOwnAdvise( new OleWrapperAdviseSink( pAdvSink ) );
1136cdf0e10cSrcweir DWORD nRegID = 0;
1137cdf0e10cSrcweir
1138cdf0e10cSrcweir if ( SUCCEEDED( pOleObject->Advise( pOwnAdvise, &nRegID ) ) && nRegID > 0 )
1139cdf0e10cSrcweir {
1140cdf0e10cSrcweir pOwnAdvise->SetRegID( nRegID );
1141cdf0e10cSrcweir *pdwConnection = InsertAdviseLinkToList( pOwnAdvise, m_pOleAdvises );
1142cdf0e10cSrcweir if ( *pdwConnection )
1143cdf0e10cSrcweir return S_OK;
1144cdf0e10cSrcweir else
1145cdf0e10cSrcweir pOleObject->Unadvise( nRegID );
1146cdf0e10cSrcweir }
1147cdf0e10cSrcweir }
1148cdf0e10cSrcweir }
1149cdf0e10cSrcweir
1150cdf0e10cSrcweir // return success always for now
1151cdf0e10cSrcweir return S_OK;
1152cdf0e10cSrcweir }
1153cdf0e10cSrcweir
1154cdf0e10cSrcweir //-------------------------------------------------------------------------------
Unadvise(DWORD dwConnection)1155cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Unadvise( DWORD dwConnection )
1156cdf0e10cSrcweir {
1157cdf0e10cSrcweir if ( DEFAULT_ARRAY_LEN > dwConnection && dwConnection > 0 && m_pOleAdvises[dwConnection] )
1158cdf0e10cSrcweir {
1159cdf0e10cSrcweir if ( m_pDefHandler )
1160cdf0e10cSrcweir {
1161cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
1162cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1163cdf0e10cSrcweir
1164cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1165cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
1166cdf0e10cSrcweir {
1167cdf0e10cSrcweir DWORD nID = m_pOleAdvises[dwConnection]->GetRegID();
1168cdf0e10cSrcweir pOleObject->Unadvise( nID );
1169cdf0e10cSrcweir }
1170cdf0e10cSrcweir }
1171cdf0e10cSrcweir
1172cdf0e10cSrcweir m_pOleAdvises[dwConnection]->DisconnectOrigAdvise();
1173cdf0e10cSrcweir m_pOleAdvises[dwConnection] = NULL;
1174cdf0e10cSrcweir
1175cdf0e10cSrcweir return S_OK;
1176cdf0e10cSrcweir }
1177cdf0e10cSrcweir
1178cdf0e10cSrcweir return E_FAIL;
1179cdf0e10cSrcweir }
1180cdf0e10cSrcweir
1181cdf0e10cSrcweir //-------------------------------------------------------------------------------
EnumAdvise(IEnumSTATDATA **)1182cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::EnumAdvise( IEnumSTATDATA ** /*ppenumAdvise*/ )
1183cdf0e10cSrcweir {
1184cdf0e10cSrcweir return E_NOTIMPL;
1185cdf0e10cSrcweir
1186cdf0e10cSrcweir // if ( CheckDefHandler() )
1187cdf0e10cSrcweir // {
1188cdf0e10cSrcweir // ComSmart< IOleObject > pOleObject;
1189cdf0e10cSrcweir // HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1190cdf0e10cSrcweir //
1191cdf0e10cSrcweir // ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1192cdf0e10cSrcweir // if ( SUCCEEDED( hr ) && pOleObject )
1193cdf0e10cSrcweir // return pOleObject->EnumAdvise( ppenumAdvise );
1194cdf0e10cSrcweir // }
1195cdf0e10cSrcweir //
1196cdf0e10cSrcweir // return E_FAIL;
1197cdf0e10cSrcweir }
1198cdf0e10cSrcweir
1199cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetMiscStatus(DWORD dwAspect,DWORD * pdwStatus)1200cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetMiscStatus( DWORD dwAspect, DWORD * pdwStatus )
1201cdf0e10cSrcweir {
1202cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetMiscStatus( DWORD dwAspect, DWORD * pdwStatus )" );
1203cdf0e10cSrcweir if ( CheckDefHandler() )
1204cdf0e10cSrcweir {
1205cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
1206cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1207cdf0e10cSrcweir
1208cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1209cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
1210cdf0e10cSrcweir return pOleObject->GetMiscStatus( dwAspect, pdwStatus );
1211cdf0e10cSrcweir }
1212cdf0e10cSrcweir
1213cdf0e10cSrcweir return E_FAIL;
1214cdf0e10cSrcweir }
1215cdf0e10cSrcweir
1216cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetColorScheme(LOGPALETTE * pLogpal)1217cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SetColorScheme( LOGPALETTE * pLogpal )
1218cdf0e10cSrcweir {
1219cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SetColorScheme( LOGPALETTE * pLogpal )" );
1220cdf0e10cSrcweir if ( CheckDefHandler() )
1221cdf0e10cSrcweir {
1222cdf0e10cSrcweir ComSmart< IOleObject > pOleObject;
1223cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleObject, (void**)&pOleObject );
1224cdf0e10cSrcweir
1225cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1226cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pOleObject )
1227cdf0e10cSrcweir return pOleObject->SetColorScheme( pLogpal );
1228cdf0e10cSrcweir }
1229cdf0e10cSrcweir
1230cdf0e10cSrcweir return E_FAIL;
1231cdf0e10cSrcweir }
1232cdf0e10cSrcweir
1233cdf0e10cSrcweir //IDataObject
1234cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetData(FORMATETC * pFormatetc,STGMEDIUM * pMedium)1235cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetData( FORMATETC * pFormatetc, STGMEDIUM * pMedium )
1236cdf0e10cSrcweir {
1237cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetData( FORMATETC * pFormatetc, STGMEDIUM * pMedium )" );
1238cdf0e10cSrcweir if ( CheckDefHandler() )
1239cdf0e10cSrcweir {
1240cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
1241cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
1242cdf0e10cSrcweir
1243cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1244cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
1245cdf0e10cSrcweir return pIDataObject->GetData( pFormatetc, pMedium );
1246cdf0e10cSrcweir }
1247cdf0e10cSrcweir
1248cdf0e10cSrcweir return E_FAIL;
1249cdf0e10cSrcweir }
1250cdf0e10cSrcweir
1251cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetDataHere(FORMATETC * pFormatetc,STGMEDIUM * pMedium)1252cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetDataHere( FORMATETC * pFormatetc, STGMEDIUM * pMedium )
1253cdf0e10cSrcweir {
1254cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetDataHere( FORMATETC * pFormatetc, STGMEDIUM * pMedium )" );
1255cdf0e10cSrcweir if ( CheckDefHandler() )
1256cdf0e10cSrcweir {
1257cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
1258cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
1259cdf0e10cSrcweir
1260cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1261cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
1262cdf0e10cSrcweir return pIDataObject->GetDataHere( pFormatetc, pMedium );
1263cdf0e10cSrcweir }
1264cdf0e10cSrcweir
1265cdf0e10cSrcweir return E_FAIL;
1266cdf0e10cSrcweir }
1267cdf0e10cSrcweir
1268cdf0e10cSrcweir //-------------------------------------------------------------------------------
QueryGetData(FORMATETC * pFormatetc)1269cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::QueryGetData( FORMATETC * pFormatetc )
1270cdf0e10cSrcweir {
1271cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::QueryGetData( FORMATETC * pFormatetc )" );
1272cdf0e10cSrcweir if ( CheckDefHandler() )
1273cdf0e10cSrcweir {
1274cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
1275cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
1276cdf0e10cSrcweir
1277cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1278cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
1279cdf0e10cSrcweir return pIDataObject->QueryGetData( pFormatetc );
1280cdf0e10cSrcweir }
1281cdf0e10cSrcweir
1282cdf0e10cSrcweir return E_FAIL;
1283cdf0e10cSrcweir }
1284cdf0e10cSrcweir
1285cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetCanonicalFormatEtc(FORMATETC * pFormatetcIn,FORMATETC * pFormatetcOut)1286cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetCanonicalFormatEtc( FORMATETC * pFormatetcIn, FORMATETC * pFormatetcOut )
1287cdf0e10cSrcweir {
1288cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetCanonicalFormatEtc( FORMATETC * pFormatetcIn, FORMATETC * pFormatetcOut )" );
1289cdf0e10cSrcweir if ( CheckDefHandler() )
1290cdf0e10cSrcweir {
1291cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
1292cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
1293cdf0e10cSrcweir
1294cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1295cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
1296cdf0e10cSrcweir return pIDataObject->GetCanonicalFormatEtc( pFormatetcIn, pFormatetcOut );
1297cdf0e10cSrcweir }
1298cdf0e10cSrcweir
1299cdf0e10cSrcweir return E_FAIL;
1300cdf0e10cSrcweir }
1301cdf0e10cSrcweir
1302cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetData(FORMATETC * pFormatetc,STGMEDIUM * pMedium,BOOL fRelease)1303cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SetData( FORMATETC * pFormatetc, STGMEDIUM * pMedium, BOOL fRelease )
1304cdf0e10cSrcweir {
1305cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SetData( FORMATETC * pFormatetc, STGMEDIUM * pMedium, BOOL fRelease )" );
1306cdf0e10cSrcweir if ( CheckDefHandler() )
1307cdf0e10cSrcweir {
1308cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
1309cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
1310cdf0e10cSrcweir
1311cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1312cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
1313cdf0e10cSrcweir return pIDataObject->SetData( pFormatetc, pMedium, fRelease );
1314cdf0e10cSrcweir }
1315cdf0e10cSrcweir
1316cdf0e10cSrcweir return E_FAIL;
1317cdf0e10cSrcweir }
1318cdf0e10cSrcweir
1319cdf0e10cSrcweir //-------------------------------------------------------------------------------
EnumFormatEtc(DWORD dwDirection,IEnumFORMATETC ** ppFormatetc)1320cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC ** ppFormatetc )
1321cdf0e10cSrcweir {
1322cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC ** ppFormatetc )" );
1323cdf0e10cSrcweir if ( CheckDefHandler() )
1324cdf0e10cSrcweir {
1325cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
1326cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
1327cdf0e10cSrcweir
1328cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1329cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
1330cdf0e10cSrcweir return pIDataObject->EnumFormatEtc( dwDirection, ppFormatetc );
1331cdf0e10cSrcweir }
1332cdf0e10cSrcweir
1333cdf0e10cSrcweir return E_FAIL;
1334cdf0e10cSrcweir }
1335cdf0e10cSrcweir
1336cdf0e10cSrcweir //-------------------------------------------------------------------------------
DAdvise(FORMATETC * pFormatetc,DWORD advf,IAdviseSink * pAdvSink,DWORD * pdwConnection)1337cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::DAdvise( FORMATETC * pFormatetc, DWORD advf, IAdviseSink * pAdvSink, DWORD * pdwConnection )
1338cdf0e10cSrcweir {
1339cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::DAdvise( FORMATETC * pFormatetc, DWORD advf, IAdviseSink * pAdvSink, DWORD * pdwConnection )" );
1340cdf0e10cSrcweir
1341cdf0e10cSrcweir if ( !pdwConnection )
1342cdf0e10cSrcweir return E_FAIL;
1343cdf0e10cSrcweir
1344cdf0e10cSrcweir // avoid reusing of the old listener
1345cdf0e10cSrcweir if ( m_pDefHandler && DEFAULT_ARRAY_LEN > *pdwConnection && *pdwConnection > 0 && m_pDataAdvises[*pdwConnection] )
1346cdf0e10cSrcweir {
1347cdf0e10cSrcweir m_pDataAdvises[*pdwConnection]->DisconnectOrigAdvise();
1348cdf0e10cSrcweir m_pDataAdvises[*pdwConnection] = NULL;
1349cdf0e10cSrcweir }
1350cdf0e10cSrcweir
1351cdf0e10cSrcweir if ( pAdvSink && CheckDefHandler() )
1352cdf0e10cSrcweir {
1353cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
1354cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
1355cdf0e10cSrcweir
1356cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1357cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
1358cdf0e10cSrcweir {
1359cdf0e10cSrcweir ComSmart< OleWrapperAdviseSink > pOwnAdvise( new OleWrapperAdviseSink( ComSmart<IAdviseSink>( pAdvSink ), pFormatetc, advf ) );
1360cdf0e10cSrcweir DWORD nRegID = 0;
1361cdf0e10cSrcweir
1362cdf0e10cSrcweir if ( SUCCEEDED( pIDataObject->DAdvise( pFormatetc, advf, pOwnAdvise, &nRegID ) ) && nRegID > 0 )
1363cdf0e10cSrcweir {
1364cdf0e10cSrcweir pOwnAdvise->SetRegID( nRegID );
1365cdf0e10cSrcweir *pdwConnection = InsertAdviseLinkToList( pOwnAdvise, m_pDataAdvises );
1366cdf0e10cSrcweir if ( *pdwConnection )
1367cdf0e10cSrcweir return S_OK;
1368cdf0e10cSrcweir else
1369cdf0e10cSrcweir pIDataObject->DUnadvise( nRegID );
1370cdf0e10cSrcweir }
1371cdf0e10cSrcweir }
1372cdf0e10cSrcweir }
1373cdf0e10cSrcweir
1374cdf0e10cSrcweir // return success always for now
1375cdf0e10cSrcweir return S_OK;
1376cdf0e10cSrcweir }
1377cdf0e10cSrcweir
1378cdf0e10cSrcweir //-------------------------------------------------------------------------------
DUnadvise(DWORD dwConnection)1379cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::DUnadvise( DWORD dwConnection )
1380cdf0e10cSrcweir {
1381cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::DUnadvise( DWORD dwConnection )" );
1382cdf0e10cSrcweir if ( m_pDefHandler && DEFAULT_ARRAY_LEN > dwConnection && dwConnection > 0 && m_pDataAdvises[dwConnection] )
1383cdf0e10cSrcweir {
1384cdf0e10cSrcweir if ( CheckDefHandler() )
1385cdf0e10cSrcweir {
1386cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
1387cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
1388cdf0e10cSrcweir
1389cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1390cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
1391cdf0e10cSrcweir {
1392cdf0e10cSrcweir DWORD nID = m_pDataAdvises[dwConnection]->GetRegID();
1393cdf0e10cSrcweir pIDataObject->DUnadvise( nID );
1394cdf0e10cSrcweir }
1395cdf0e10cSrcweir }
1396cdf0e10cSrcweir
1397cdf0e10cSrcweir m_pDataAdvises[dwConnection]->DisconnectOrigAdvise();
1398cdf0e10cSrcweir m_pDataAdvises[dwConnection] = NULL;
1399cdf0e10cSrcweir
1400cdf0e10cSrcweir return S_OK;
1401cdf0e10cSrcweir }
1402cdf0e10cSrcweir
1403cdf0e10cSrcweir return E_FAIL;
1404cdf0e10cSrcweir }
1405cdf0e10cSrcweir
1406cdf0e10cSrcweir //-------------------------------------------------------------------------------
EnumDAdvise(IEnumSTATDATA ** ppenumAdvise)1407cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::EnumDAdvise( IEnumSTATDATA ** ppenumAdvise )
1408cdf0e10cSrcweir {
1409cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::EnumDAdvise( IEnumSTATDATA ** ppenumAdvise )" );
1410cdf0e10cSrcweir if ( CheckDefHandler() )
1411cdf0e10cSrcweir {
1412cdf0e10cSrcweir ComSmart< IDataObject > pIDataObject;
1413cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDataObject, (void**)&pIDataObject );
1414cdf0e10cSrcweir
1415cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1416cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDataObject )
1417cdf0e10cSrcweir return pIDataObject->EnumDAdvise( ppenumAdvise );
1418cdf0e10cSrcweir }
1419cdf0e10cSrcweir
1420cdf0e10cSrcweir return E_FAIL;
1421cdf0e10cSrcweir }
1422cdf0e10cSrcweir
1423cdf0e10cSrcweir // IRunnableObject
1424cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetRunningClass(LPCLSID lpClsid)1425cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetRunningClass( LPCLSID lpClsid )
1426cdf0e10cSrcweir {
1427cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetRunningClass( LPCLSID lpClsid )" );
1428cdf0e10cSrcweir if ( CheckDefHandler() )
1429cdf0e10cSrcweir {
1430cdf0e10cSrcweir ComSmart< IRunnableObject > pIRunObj;
1431cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj );
1432cdf0e10cSrcweir
1433cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1434cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIRunObj )
1435cdf0e10cSrcweir return pIRunObj->GetRunningClass( lpClsid );
1436cdf0e10cSrcweir }
1437cdf0e10cSrcweir
1438cdf0e10cSrcweir return E_FAIL;
1439cdf0e10cSrcweir }
1440cdf0e10cSrcweir
1441cdf0e10cSrcweir //-------------------------------------------------------------------------------
Run(LPBINDCTX pbc)1442cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Run( LPBINDCTX pbc )
1443cdf0e10cSrcweir {
1444cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Run( LPBINDCTX pbc )" );
1445cdf0e10cSrcweir if ( CheckDefHandler() )
1446cdf0e10cSrcweir {
1447cdf0e10cSrcweir ComSmart< IRunnableObject > pIRunObj;
1448cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj );
1449cdf0e10cSrcweir
1450cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1451cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIRunObj )
1452cdf0e10cSrcweir return pIRunObj->Run( pbc );
1453cdf0e10cSrcweir }
1454cdf0e10cSrcweir
1455cdf0e10cSrcweir return E_FAIL;
1456cdf0e10cSrcweir }
1457cdf0e10cSrcweir
1458cdf0e10cSrcweir //-------------------------------------------------------------------------------
IsRunning()1459cdf0e10cSrcweir BOOL STDMETHODCALLTYPE InprocEmbedDocument_Impl::IsRunning()
1460cdf0e10cSrcweir {
1461cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::IsRunning()" );
1462cdf0e10cSrcweir if ( CheckDefHandler() )
1463cdf0e10cSrcweir {
1464cdf0e10cSrcweir ComSmart< IRunnableObject > pIRunObj;
1465cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj );
1466cdf0e10cSrcweir
1467cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1468cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIRunObj )
1469cdf0e10cSrcweir return pIRunObj->IsRunning();
1470cdf0e10cSrcweir }
1471cdf0e10cSrcweir
1472cdf0e10cSrcweir return E_FAIL;
1473cdf0e10cSrcweir
1474cdf0e10cSrcweir }
1475cdf0e10cSrcweir
1476cdf0e10cSrcweir //-------------------------------------------------------------------------------
LockRunning(BOOL fLock,BOOL fLastUnlockCloses)1477cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::LockRunning( BOOL fLock, BOOL fLastUnlockCloses )
1478cdf0e10cSrcweir {
1479cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::LockRunning( BOOL fLock, BOOL fLastUnlockCloses )" );
1480cdf0e10cSrcweir if ( CheckDefHandler() )
1481cdf0e10cSrcweir {
1482cdf0e10cSrcweir ComSmart< IRunnableObject > pIRunObj;
1483cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj );
1484cdf0e10cSrcweir
1485cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1486cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIRunObj )
1487cdf0e10cSrcweir return pIRunObj->LockRunning( fLock, fLastUnlockCloses );
1488cdf0e10cSrcweir }
1489cdf0e10cSrcweir
1490cdf0e10cSrcweir return E_FAIL;
1491cdf0e10cSrcweir }
1492cdf0e10cSrcweir
1493cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetContainedObject(BOOL fContained)1494cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SetContainedObject( BOOL fContained)
1495cdf0e10cSrcweir {
1496cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SetContainedObject( BOOL fContained)" );
1497cdf0e10cSrcweir if ( CheckDefHandler() )
1498cdf0e10cSrcweir {
1499cdf0e10cSrcweir ComSmart< IRunnableObject > pIRunObj;
1500cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IRunnableObject, (void**)&pIRunObj );
1501cdf0e10cSrcweir
1502cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1503cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIRunObj )
1504cdf0e10cSrcweir return pIRunObj->SetContainedObject( fContained );
1505cdf0e10cSrcweir }
1506cdf0e10cSrcweir
1507cdf0e10cSrcweir return E_FAIL;
1508cdf0e10cSrcweir }
1509cdf0e10cSrcweir
1510cdf0e10cSrcweir
1511cdf0e10cSrcweir // IViewObject methods
1512cdf0e10cSrcweir //-------------------------------------------------------------------------------
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)1513cdf0e10cSrcweir 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 )
1514cdf0e10cSrcweir {
1515cdf0e10cSrcweir WRITEDEBUGINFO( "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 )" );
1516cdf0e10cSrcweir if ( CheckDefHandler() )
1517cdf0e10cSrcweir {
1518cdf0e10cSrcweir ComSmart< IViewObject > pIViewObject;
1519cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject );
1520cdf0e10cSrcweir
1521cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1522cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIViewObject )
1523cdf0e10cSrcweir return pIViewObject->Draw( dwDrawAspect, lindex, pvAspect, ptd, hdcTargetDev, hdcDraw, lprcBounds, lprcWBounds, pfnContinue, dwContinue );
1524cdf0e10cSrcweir }
1525cdf0e10cSrcweir
1526cdf0e10cSrcweir return E_FAIL;
1527cdf0e10cSrcweir }
1528cdf0e10cSrcweir
1529cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetColorSet(DWORD dwDrawAspect,LONG lindex,void * pvAspect,DVTARGETDEVICE * ptd,HDC hicTargetDev,LOGPALETTE ** ppColorSet)1530cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetColorSet( DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet )
1531cdf0e10cSrcweir {
1532cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetColorSet( DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet )" );
1533cdf0e10cSrcweir if ( CheckDefHandler() )
1534cdf0e10cSrcweir {
1535cdf0e10cSrcweir ComSmart< IViewObject > pIViewObject;
1536cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject );
1537cdf0e10cSrcweir
1538cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1539cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIViewObject )
1540cdf0e10cSrcweir return pIViewObject->GetColorSet( dwDrawAspect, lindex, pvAspect, ptd, hicTargetDev, ppColorSet );
1541cdf0e10cSrcweir }
1542cdf0e10cSrcweir
1543cdf0e10cSrcweir return E_FAIL;
1544cdf0e10cSrcweir }
1545cdf0e10cSrcweir
1546cdf0e10cSrcweir //-------------------------------------------------------------------------------
Freeze(DWORD dwDrawAspect,LONG lindex,void * pvAspect,DWORD * pdwFreeze)1547cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Freeze( DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze )
1548cdf0e10cSrcweir {
1549cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Freeze( DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze )" );
1550cdf0e10cSrcweir if ( CheckDefHandler() )
1551cdf0e10cSrcweir {
1552cdf0e10cSrcweir ComSmart< IViewObject > pIViewObject;
1553cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject );
1554cdf0e10cSrcweir
1555cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1556cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIViewObject )
1557cdf0e10cSrcweir return pIViewObject->Freeze( dwDrawAspect, lindex, pvAspect, pdwFreeze );
1558cdf0e10cSrcweir }
1559cdf0e10cSrcweir
1560cdf0e10cSrcweir return E_FAIL;
1561cdf0e10cSrcweir }
1562cdf0e10cSrcweir
1563cdf0e10cSrcweir //-------------------------------------------------------------------------------
Unfreeze(DWORD dwFreeze)1564cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Unfreeze( DWORD dwFreeze )
1565cdf0e10cSrcweir {
1566cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Unfreeze( DWORD dwFreeze )" );
1567cdf0e10cSrcweir if ( CheckDefHandler() )
1568cdf0e10cSrcweir {
1569cdf0e10cSrcweir ComSmart< IViewObject > pIViewObject;
1570cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject );
1571cdf0e10cSrcweir
1572cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1573cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIViewObject )
1574cdf0e10cSrcweir return pIViewObject->Unfreeze( dwFreeze );
1575cdf0e10cSrcweir }
1576cdf0e10cSrcweir
1577cdf0e10cSrcweir return E_FAIL;
1578cdf0e10cSrcweir }
1579cdf0e10cSrcweir
1580cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetAdvise(DWORD aspects,DWORD advf,IAdviseSink * pAdvSink)1581cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SetAdvise( DWORD aspects, DWORD advf, IAdviseSink *pAdvSink )
1582cdf0e10cSrcweir {
1583cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SetAdvise( DWORD aspects, DWORD advf, IAdviseSink *pAdvSink )" );
1584cdf0e10cSrcweir
1585cdf0e10cSrcweir // CheckDefHandler will set the listener, avoid reusing of old listener
1586cdf0e10cSrcweir if ( m_pViewAdvise )
1587cdf0e10cSrcweir {
1588cdf0e10cSrcweir m_pViewAdvise->DisconnectOrigAdvise();
1589cdf0e10cSrcweir m_pViewAdvise = NULL;
1590cdf0e10cSrcweir }
1591cdf0e10cSrcweir
1592cdf0e10cSrcweir if ( pAdvSink && CheckDefHandler() )
1593cdf0e10cSrcweir {
1594cdf0e10cSrcweir ComSmart< IViewObject > pIViewObject;
1595cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject, (void**)&pIViewObject );
1596cdf0e10cSrcweir
1597cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1598cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIViewObject )
1599cdf0e10cSrcweir {
1600cdf0e10cSrcweir ComSmart< OleWrapperAdviseSink > pOwnAdvise( new OleWrapperAdviseSink( pAdvSink, aspects, advf ) );
1601cdf0e10cSrcweir
1602cdf0e10cSrcweir if ( SUCCEEDED( pIViewObject->SetAdvise( aspects, advf, pOwnAdvise ) ) )
1603cdf0e10cSrcweir {
1604cdf0e10cSrcweir m_pViewAdvise = pOwnAdvise;
1605cdf0e10cSrcweir return S_OK;
1606cdf0e10cSrcweir }
1607cdf0e10cSrcweir }
1608cdf0e10cSrcweir }
1609cdf0e10cSrcweir
1610cdf0e10cSrcweir return S_OK;
1611cdf0e10cSrcweir }
1612cdf0e10cSrcweir
1613cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetAdvise(DWORD * pAspects,DWORD * pAdvf,IAdviseSink ** ppAdvSink)1614cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetAdvise( DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink )
1615cdf0e10cSrcweir {
1616cdf0e10cSrcweir if ( !ppAdvSink )
1617cdf0e10cSrcweir return E_INVALIDARG;
1618cdf0e10cSrcweir
1619cdf0e10cSrcweir if ( m_pViewAdvise )
1620cdf0e10cSrcweir {
1621cdf0e10cSrcweir if ( pAspects )
1622cdf0e10cSrcweir *pAspects = m_pViewAdvise->GetAspect();
1623cdf0e10cSrcweir
1624cdf0e10cSrcweir if ( pAdvf )
1625cdf0e10cSrcweir *pAdvf = m_pViewAdvise->GetViewAdviseFlag();
1626cdf0e10cSrcweir
1627cdf0e10cSrcweir *ppAdvSink = m_pViewAdvise->GetOrigAdvise();
1628cdf0e10cSrcweir if ( *ppAdvSink )
1629cdf0e10cSrcweir (*ppAdvSink)->AddRef();
1630cdf0e10cSrcweir }
1631cdf0e10cSrcweir else
1632cdf0e10cSrcweir *ppAdvSink = NULL;
1633cdf0e10cSrcweir
1634cdf0e10cSrcweir return S_OK;
1635cdf0e10cSrcweir }
1636cdf0e10cSrcweir
1637cdf0e10cSrcweir // IViewObject2 methods
1638cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetExtent(DWORD dwDrawAspect,LONG lindex,DVTARGETDEVICE * ptd,LPSIZEL lpsizel)1639cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetExtent( DWORD dwDrawAspect, LONG lindex, DVTARGETDEVICE *ptd, LPSIZEL lpsizel )
1640cdf0e10cSrcweir {
1641cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetExtent( DWORD dwDrawAspect, LONG lindex, DVTARGETDEVICE *ptd, LPSIZEL lpsizel )" );
1642cdf0e10cSrcweir if ( CheckDefHandler() )
1643cdf0e10cSrcweir {
1644cdf0e10cSrcweir ComSmart< IViewObject2 > pIViewObject2;
1645cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IViewObject2, (void**)&pIViewObject2 );
1646cdf0e10cSrcweir
1647cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1648cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIViewObject2 )
1649cdf0e10cSrcweir return pIViewObject2->GetExtent( dwDrawAspect, lindex, ptd, lpsizel );
1650cdf0e10cSrcweir }
1651cdf0e10cSrcweir
1652cdf0e10cSrcweir return E_FAIL;
1653cdf0e10cSrcweir }
1654cdf0e10cSrcweir
1655cdf0e10cSrcweir
1656cdf0e10cSrcweir
1657cdf0e10cSrcweir // IOleWindow methods
1658cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetWindow(HWND * phwnd)1659cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetWindow( HWND *phwnd )
1660cdf0e10cSrcweir {
1661cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetWindow( HWND *phwnd )" );
1662cdf0e10cSrcweir if ( CheckDefHandler() )
1663cdf0e10cSrcweir {
1664cdf0e10cSrcweir ComSmart< IOleWindow > pIOleWindow;
1665cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleWindow, (void**)&pIOleWindow );
1666cdf0e10cSrcweir
1667cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1668cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleWindow )
1669cdf0e10cSrcweir return pIOleWindow->GetWindow( phwnd );
1670cdf0e10cSrcweir }
1671cdf0e10cSrcweir
1672cdf0e10cSrcweir return E_FAIL;
1673cdf0e10cSrcweir }
1674cdf0e10cSrcweir
1675cdf0e10cSrcweir //-------------------------------------------------------------------------------
ContextSensitiveHelp(BOOL fEnterMode)1676cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::ContextSensitiveHelp( BOOL fEnterMode )
1677cdf0e10cSrcweir {
1678cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::ContextSensitiveHelp( BOOL fEnterMode )" );
1679cdf0e10cSrcweir if ( CheckDefHandler() )
1680cdf0e10cSrcweir {
1681cdf0e10cSrcweir ComSmart< IOleWindow > pIOleWindow;
1682cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleWindow, (void**)&pIOleWindow );
1683cdf0e10cSrcweir
1684cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1685cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleWindow )
1686cdf0e10cSrcweir return pIOleWindow->ContextSensitiveHelp( fEnterMode );
1687cdf0e10cSrcweir }
1688cdf0e10cSrcweir
1689cdf0e10cSrcweir return E_FAIL;
1690cdf0e10cSrcweir }
1691cdf0e10cSrcweir
1692cdf0e10cSrcweir
1693cdf0e10cSrcweir // IOleInPlaceObject methods
1694cdf0e10cSrcweir //-------------------------------------------------------------------------------
InPlaceDeactivate(void)1695cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InPlaceDeactivate( void )
1696cdf0e10cSrcweir {
1697cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::InPlaceDeactivate( void )" );
1698cdf0e10cSrcweir if ( CheckDefHandler() )
1699cdf0e10cSrcweir {
1700cdf0e10cSrcweir ComSmart< IOleInPlaceObject > pIOleInPlaceObject;
1701cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, (void**)&pIOleInPlaceObject );
1702cdf0e10cSrcweir
1703cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1704cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleInPlaceObject )
1705cdf0e10cSrcweir return pIOleInPlaceObject->InPlaceDeactivate();
1706cdf0e10cSrcweir }
1707cdf0e10cSrcweir
1708cdf0e10cSrcweir return E_FAIL;
1709cdf0e10cSrcweir }
1710cdf0e10cSrcweir
1711cdf0e10cSrcweir //-------------------------------------------------------------------------------
UIDeactivate(void)1712cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::UIDeactivate( void )
1713cdf0e10cSrcweir {
1714cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::UIDeactivate( void )" );
1715cdf0e10cSrcweir if ( CheckDefHandler() )
1716cdf0e10cSrcweir {
1717cdf0e10cSrcweir ComSmart< IOleInPlaceObject > pIOleInPlaceObject;
1718cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, (void**)&pIOleInPlaceObject );
1719cdf0e10cSrcweir
1720cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1721cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleInPlaceObject )
1722cdf0e10cSrcweir return pIOleInPlaceObject->UIDeactivate();
1723cdf0e10cSrcweir }
1724cdf0e10cSrcweir
1725cdf0e10cSrcweir return E_FAIL;
1726cdf0e10cSrcweir }
1727cdf0e10cSrcweir
1728cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetObjectRects(LPCRECT lprcPosRect,LPCRECT lprcClipRect)1729cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::SetObjectRects( LPCRECT lprcPosRect, LPCRECT lprcClipRect )
1730cdf0e10cSrcweir {
1731cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::SetObjectRects( LPCRECT lprcPosRect, LPCRECT lprcClipRect )" );
1732cdf0e10cSrcweir if ( CheckDefHandler() )
1733cdf0e10cSrcweir {
1734cdf0e10cSrcweir ComSmart< IOleInPlaceObject > pIOleInPlaceObject;
1735cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, (void**)&pIOleInPlaceObject );
1736cdf0e10cSrcweir
1737cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1738cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleInPlaceObject )
1739cdf0e10cSrcweir return pIOleInPlaceObject->SetObjectRects( lprcPosRect, lprcClipRect );
1740cdf0e10cSrcweir }
1741cdf0e10cSrcweir
1742cdf0e10cSrcweir return E_FAIL;
1743cdf0e10cSrcweir }
1744cdf0e10cSrcweir
1745cdf0e10cSrcweir //-------------------------------------------------------------------------------
ReactivateAndUndo(void)1746cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::ReactivateAndUndo( void )
1747cdf0e10cSrcweir {
1748cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::ReactivateAndUndo( void )" );
1749cdf0e10cSrcweir if ( CheckDefHandler() )
1750cdf0e10cSrcweir {
1751cdf0e10cSrcweir ComSmart< IOleInPlaceObject > pIOleInPlaceObject;
1752cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IOleInPlaceObject, (void**)&pIOleInPlaceObject );
1753cdf0e10cSrcweir
1754cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1755cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleInPlaceObject )
1756cdf0e10cSrcweir return pIOleInPlaceObject->ReactivateAndUndo();
1757cdf0e10cSrcweir }
1758cdf0e10cSrcweir
1759cdf0e10cSrcweir return E_FAIL;
1760cdf0e10cSrcweir }
1761cdf0e10cSrcweir
1762cdf0e10cSrcweir
1763cdf0e10cSrcweir // IDispatch methods
1764cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetTypeInfoCount(UINT * pctinfo)1765cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetTypeInfoCount( UINT *pctinfo )
1766cdf0e10cSrcweir {
1767cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetTypeInfoCount( UINT *pctinfo )" );
1768cdf0e10cSrcweir if ( CheckDefHandler() )
1769cdf0e10cSrcweir {
1770cdf0e10cSrcweir ComSmart< IDispatch > pIDispatch;
1771cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, (void**)&pIDispatch );
1772cdf0e10cSrcweir
1773cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1774cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDispatch )
1775cdf0e10cSrcweir return pIDispatch->GetTypeInfoCount( pctinfo );
1776cdf0e10cSrcweir }
1777cdf0e10cSrcweir
1778cdf0e10cSrcweir return E_FAIL;
1779cdf0e10cSrcweir }
1780cdf0e10cSrcweir
1781cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetTypeInfo(UINT iTInfo,LCID lcid,ITypeInfo ** ppTInfo)1782cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetTypeInfo( UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo )
1783cdf0e10cSrcweir {
1784cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetTypeInfo( UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo )" );
1785cdf0e10cSrcweir if ( CheckDefHandler() )
1786cdf0e10cSrcweir {
1787cdf0e10cSrcweir ComSmart< IDispatch > pIDispatch;
1788cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, (void**)&pIDispatch );
1789cdf0e10cSrcweir
1790cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1791cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDispatch )
1792cdf0e10cSrcweir return pIDispatch->GetTypeInfo( iTInfo, lcid, ppTInfo );
1793cdf0e10cSrcweir }
1794cdf0e10cSrcweir
1795cdf0e10cSrcweir return E_FAIL;
1796cdf0e10cSrcweir }
1797cdf0e10cSrcweir
1798cdf0e10cSrcweir //-------------------------------------------------------------------------------
GetIDsOfNames(REFIID riid,LPOLESTR * rgszNames,UINT cNames,LCID lcid,DISPID * rgDispId)1799cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::GetIDsOfNames( REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId )
1800cdf0e10cSrcweir {
1801cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::GetIDsOfNames( REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId )" );
1802cdf0e10cSrcweir if ( CheckDefHandler() )
1803cdf0e10cSrcweir {
1804cdf0e10cSrcweir ComSmart< IDispatch > pIDispatch;
1805cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, (void**)&pIDispatch );
1806cdf0e10cSrcweir
1807cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1808cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDispatch )
1809cdf0e10cSrcweir return pIDispatch->GetIDsOfNames( riid, rgszNames, cNames, lcid, rgDispId );
1810cdf0e10cSrcweir }
1811cdf0e10cSrcweir
1812cdf0e10cSrcweir return E_FAIL;
1813cdf0e10cSrcweir }
1814cdf0e10cSrcweir
1815cdf0e10cSrcweir //-------------------------------------------------------------------------------
Invoke(DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS * pDispParams,VARIANT * pVarResult,EXCEPINFO * pExcepInfo,UINT * puArgErr)1816cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr )
1817cdf0e10cSrcweir {
1818cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr )" );
1819cdf0e10cSrcweir if ( CheckDefHandler() )
1820cdf0e10cSrcweir {
1821cdf0e10cSrcweir ComSmart< IDispatch > pIDispatch;
1822cdf0e10cSrcweir HRESULT hr = m_pDefHandler->QueryInterface( IID_IDispatch, (void**)&pIDispatch );
1823cdf0e10cSrcweir
1824cdf0e10cSrcweir ULONGGuard aGuard( &m_nCallsOnStack ); // avoid reentrance problem
1825cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIDispatch )
1826cdf0e10cSrcweir return pIDispatch->Invoke( dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr );
1827cdf0e10cSrcweir }
1828cdf0e10cSrcweir
1829cdf0e10cSrcweir return E_FAIL;
1830cdf0e10cSrcweir }
1831cdf0e10cSrcweir
1832cdf0e10cSrcweir
1833cdf0e10cSrcweir // ====
1834cdf0e10cSrcweir // InternalCacheWrapper
1835cdf0e10cSrcweir // ====
1836cdf0e10cSrcweir
1837cdf0e10cSrcweir // IUnknown
1838cdf0e10cSrcweir //-------------------------------------------------------------------------------
QueryInterface(REFIID riid,void FAR * FAR * ppv)1839cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::QueryInterface( REFIID riid, void FAR* FAR* ppv )
1840cdf0e10cSrcweir {
1841cdf0e10cSrcweir return m_rOwnDocument.QueryInterface( riid, ppv );
1842cdf0e10cSrcweir }
1843cdf0e10cSrcweir
1844cdf0e10cSrcweir //-------------------------------------------------------------------------------
STDMETHODIMP_(ULONG)1845cdf0e10cSrcweir STDMETHODIMP_(ULONG) InprocEmbedDocument_Impl::InternalCacheWrapper::AddRef()
1846cdf0e10cSrcweir {
1847cdf0e10cSrcweir return m_rOwnDocument.AddRef();
1848cdf0e10cSrcweir }
1849cdf0e10cSrcweir
1850cdf0e10cSrcweir //-------------------------------------------------------------------------------
STDMETHODIMP_(ULONG)1851cdf0e10cSrcweir STDMETHODIMP_(ULONG) InprocEmbedDocument_Impl::InternalCacheWrapper::Release()
1852cdf0e10cSrcweir {
1853cdf0e10cSrcweir return m_rOwnDocument.Release();
1854cdf0e10cSrcweir }
1855cdf0e10cSrcweir
1856cdf0e10cSrcweir // IOleCache methods
1857cdf0e10cSrcweir //-------------------------------------------------------------------------------
Cache(FORMATETC * pformatetc,DWORD advf,DWORD * pdwConnection)1858cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::Cache( FORMATETC *pformatetc, DWORD advf, DWORD *pdwConnection )
1859cdf0e10cSrcweir {
1860cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::InternalCacheWrapper::Cache( FORMATETC *pformatetc, DWORD advf, DWORD *pdwConnection )" );
1861cdf0e10cSrcweir if ( m_rOwnDocument.CheckDefHandler() )
1862cdf0e10cSrcweir {
1863cdf0e10cSrcweir ComSmart< IOleCache > pIOleCache;
1864cdf0e10cSrcweir HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, (void**)&pIOleCache );
1865cdf0e10cSrcweir
1866cdf0e10cSrcweir ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem
1867cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleCache )
1868cdf0e10cSrcweir return pIOleCache->Cache( pformatetc, advf, pdwConnection );
1869cdf0e10cSrcweir }
1870cdf0e10cSrcweir
1871cdf0e10cSrcweir return E_FAIL;
1872cdf0e10cSrcweir }
1873cdf0e10cSrcweir
1874cdf0e10cSrcweir //-------------------------------------------------------------------------------
Uncache(DWORD dwConnection)1875cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::Uncache( DWORD dwConnection )
1876cdf0e10cSrcweir {
1877cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::InternalCacheWrapper::Uncache( DWORD dwConnection )" );
1878cdf0e10cSrcweir if ( m_rOwnDocument.CheckDefHandler() )
1879cdf0e10cSrcweir {
1880cdf0e10cSrcweir ComSmart< IOleCache > pIOleCache;
1881cdf0e10cSrcweir HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, (void**)&pIOleCache );
1882cdf0e10cSrcweir
1883cdf0e10cSrcweir ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem
1884cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleCache )
1885cdf0e10cSrcweir return pIOleCache->Uncache( dwConnection );
1886cdf0e10cSrcweir }
1887cdf0e10cSrcweir
1888cdf0e10cSrcweir return E_FAIL;
1889cdf0e10cSrcweir }
1890cdf0e10cSrcweir
1891cdf0e10cSrcweir //-------------------------------------------------------------------------------
EnumCache(IEnumSTATDATA ** ppenumSTATDATA)1892cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::EnumCache( IEnumSTATDATA **ppenumSTATDATA )
1893cdf0e10cSrcweir {
1894cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::InternalCacheWrapper::EnumCache( IEnumSTATDATA **ppenumSTATDATA )" );
1895cdf0e10cSrcweir if ( m_rOwnDocument.CheckDefHandler() )
1896cdf0e10cSrcweir {
1897cdf0e10cSrcweir ComSmart< IOleCache > pIOleCache;
1898cdf0e10cSrcweir HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, (void**)&pIOleCache );
1899cdf0e10cSrcweir
1900cdf0e10cSrcweir ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem
1901cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleCache )
1902cdf0e10cSrcweir return pIOleCache->EnumCache( ppenumSTATDATA );
1903cdf0e10cSrcweir }
1904cdf0e10cSrcweir
1905cdf0e10cSrcweir return E_FAIL;
1906cdf0e10cSrcweir }
1907cdf0e10cSrcweir
1908cdf0e10cSrcweir //-------------------------------------------------------------------------------
InitCache(IDataObject * pDataObject)1909cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::InitCache( IDataObject *pDataObject )
1910cdf0e10cSrcweir {
1911cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::InternalCacheWrapper::InitCache( IDataObject *pDataObject )" );
1912cdf0e10cSrcweir if ( m_rOwnDocument.CheckDefHandler() )
1913cdf0e10cSrcweir {
1914cdf0e10cSrcweir ComSmart< IOleCache > pIOleCache;
1915cdf0e10cSrcweir HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, (void**)&pIOleCache );
1916cdf0e10cSrcweir
1917cdf0e10cSrcweir ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem
1918cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleCache )
1919cdf0e10cSrcweir return pIOleCache->InitCache( pDataObject );
1920cdf0e10cSrcweir }
1921cdf0e10cSrcweir
1922cdf0e10cSrcweir return E_FAIL;
1923cdf0e10cSrcweir }
1924cdf0e10cSrcweir
1925cdf0e10cSrcweir //-------------------------------------------------------------------------------
SetData(FORMATETC * pformatetc,STGMEDIUM * pmedium,BOOL fRelease)1926cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::SetData( FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease )
1927cdf0e10cSrcweir {
1928cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::InternalCacheWrapper::SetData( FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease )" );
1929cdf0e10cSrcweir if ( m_rOwnDocument.CheckDefHandler() )
1930cdf0e10cSrcweir {
1931cdf0e10cSrcweir ComSmart< IOleCache > pIOleCache;
1932cdf0e10cSrcweir HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache, (void**)&pIOleCache );
1933cdf0e10cSrcweir
1934cdf0e10cSrcweir ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem
1935cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleCache )
1936cdf0e10cSrcweir return pIOleCache->SetData( pformatetc, pmedium, fRelease );
1937cdf0e10cSrcweir }
1938cdf0e10cSrcweir
1939cdf0e10cSrcweir return E_FAIL;
1940cdf0e10cSrcweir }
1941cdf0e10cSrcweir
1942cdf0e10cSrcweir // IOleCache2 methods
1943cdf0e10cSrcweir //-------------------------------------------------------------------------------
UpdateCache(LPDATAOBJECT pDataObject,DWORD grfUpdf,LPVOID pReserved)1944cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::UpdateCache( LPDATAOBJECT pDataObject, DWORD grfUpdf, LPVOID pReserved )
1945cdf0e10cSrcweir {
1946cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::InternalCacheWrapper::UpdateCache( LPDATAOBJECT pDataObject, DWORD grfUpdf, LPVOID pReserved )" );
1947cdf0e10cSrcweir if ( m_rOwnDocument.CheckDefHandler() )
1948cdf0e10cSrcweir {
1949cdf0e10cSrcweir ComSmart< IOleCache2 > pIOleCache2;
1950cdf0e10cSrcweir HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache2, (void**)&pIOleCache2 );
1951cdf0e10cSrcweir
1952cdf0e10cSrcweir ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem
1953cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleCache2 )
1954cdf0e10cSrcweir return pIOleCache2->UpdateCache( pDataObject, grfUpdf, pReserved );
1955cdf0e10cSrcweir }
1956cdf0e10cSrcweir
1957cdf0e10cSrcweir return E_FAIL;
1958cdf0e10cSrcweir }
1959cdf0e10cSrcweir
1960cdf0e10cSrcweir //-------------------------------------------------------------------------------
DiscardCache(DWORD dwDiscardOptions)1961cdf0e10cSrcweir STDMETHODIMP InprocEmbedDocument_Impl::InternalCacheWrapper::DiscardCache( DWORD dwDiscardOptions )
1962cdf0e10cSrcweir {
1963cdf0e10cSrcweir WRITEDEBUGINFO( "InprocEmbedDocument_Impl::InternalCacheWrapper::DiscardCache( DWORD dwDiscardOptions )" );
1964cdf0e10cSrcweir if ( m_rOwnDocument.CheckDefHandler() )
1965cdf0e10cSrcweir {
1966cdf0e10cSrcweir ComSmart< IOleCache2 > pIOleCache2;
1967cdf0e10cSrcweir HRESULT hr = m_rOwnDocument.GetDefHandler()->QueryInterface( IID_IOleCache2, (void**)&pIOleCache2 );
1968cdf0e10cSrcweir
1969cdf0e10cSrcweir ULONGGuard aGuard( &m_rOwnDocument.m_nCallsOnStack ); // avoid reentrance problem
1970cdf0e10cSrcweir if ( SUCCEEDED( hr ) && pIOleCache2 )
1971cdf0e10cSrcweir return pIOleCache2->DiscardCache( dwDiscardOptions );
1972cdf0e10cSrcweir }
1973cdf0e10cSrcweir
1974cdf0e10cSrcweir return E_FAIL;
1975cdf0e10cSrcweir }
1976cdf0e10cSrcweir
1977cdf0e10cSrcweir }; // namespace inprocserv
1978cdf0e10cSrcweir
1979