Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

132 lines
2.9 KiB

// ddeadv.cpp
//
// Mapping from DDE advise to/from OLE 2.0 advises
//
// Author:
// Jason Fuller jasonful 8-16-92
//
// Copyright (c) 1992 Microsoft Corporation
#include "ole2int.h"
#include "srvr.h"
#include "ddedebug.h"
ASSERTDATA
INTERNAL CDefClient::DoOle20Advise
(OLE_NOTIFICATION options,
CLIPFORMAT cf)
{
HRESULT hresult = NOERROR;
FORMATETC formatetc;
formatetc.cfFormat = cf;
formatetc.ptd = m_ptd;
formatetc.lindex = DEF_LINDEX;
formatetc.dwAspect = DVASPECT_CONTENT;
// only types 1.0 client wants
formatetc.tymed = TYMED_HGLOBAL | TYMED_MFPICT | TYMED_GDI;
intrDebugOut((DEB_ITRACE,
"%x _IN CDefClient::DoOle20Advise(options=%x,cf=%x)\n",
this,
options,
(ULONG)cf));
ChkC(this);
switch (options)
{
case OLE_CHANGED:
#ifdef UPDATE
case OLE_SAVED:
#endif
if (0 == m_dwConnectionDataObj)
{
Assert (m_lpdataObj);
RetErr (m_lpdataObj->DAdvise (&formatetc,0/* ADVF_PRIMEFIRST*/,
&m_AdviseSink,
&m_dwConnectionDataObj));
Assert (m_dwConnectionDataObj != 0);
}
// Fall through:
// Even for OLE_CHANGED do an Ole Advise so we get OnClose
// notifications for linked objects.
#ifndef UPDATE
case OLE_SAVED:
#endif
case OLE_RENAMED: // Link case
case OLE_CLOSED:
Assert (m_lpoleObj);
// Only do one OleObject::Advise even if 1.0 client asks
// for two advises for two different formats and two events,
// i.e., native and metafile, save and close.
if (m_lpoleObj && 0==m_dwConnectionOleObj)
{
Puts ("Calling OleObject::Advise\r\n");
Assert (m_dwConnectionOleObj == 0L);
hresult = m_lpoleObj->Advise (&m_AdviseSink, &m_dwConnectionOleObj);
if (hresult != NOERROR)
{
goto errRtn;
}
}
Assert (m_dwConnectionOleObj != 0);
break;
default:
Assert(0);
break;
}
errRtn:
intrDebugOut((DEB_ITRACE,
"%x _OUT CDefClient::DoOle20Advise hresult=%x\n",
this,hresult));
return NOERROR;
}
INTERNAL CDefClient::DoOle20UnAdviseAll
(void)
{
HRESULT hr;
intrDebugOut((DEB_ITRACE,
"%x _IN CDefClient::DoOle20UnAdviseAll\n",
this));
ChkC(this);
if (m_dwConnectionOleObj != 0L)
{
if (m_lpoleObj)
{
intrDebugOut((DEB_ITRACE,
"%x ::DoOle20UnAdviseAll unadvise OLE obj\n",
this));
Puts ("Unadvising ole obj\r\n");
hr = m_lpoleObj->Unadvise (m_dwConnectionOleObj);
intrAssert(hr == NOERROR);
m_dwConnectionOleObj = 0L;
}
}
if (m_dwConnectionDataObj != 0L)
{
if (m_lpdataObj)
{
intrDebugOut((DEB_ITRACE,
"%x ::DoOle20UnAdviseAll unadvise DATA obj\n",
this));
Puts ("Unadvising data obj\r\n");
hr = m_lpdataObj->DUnadvise (m_dwConnectionDataObj);
intrAssert(hr == NOERROR);
m_dwConnectionDataObj = 0L;
}
}
intrDebugOut((DEB_ITRACE,
"%x _OUT CDefClient::DoOle20UnAdviseAll\n",
this));
return NOERROR;
}