STDMETHODIMP CTextObject::DAdvise(FORMATETC* pFormatEtc, DWORD advf, IAdviseSink* pAdvSink, DWORD* pdwConnection)
{
	HRESULT hRes = m_spDataAdviseHolder == NULL ? CreateDataAdviseHolder(&m_spDataAdviseHolder) : S_OK;
	if (SUCCEEDED(hRes))
		hRes = m_spDataAdviseHolder->Advise(this, pFormatEtc, advf, pAdvSink, pdwConnection);
	return hRes;
}
/// Function name  : DAdvise
// Description     : Register for a 'data changed' notification
// 
// FORMATETC*    pFormat          : [in]  The data format to monitor for changes
// DWORD         dwFlags          : [in]  flags
// IAdviseSink*  pOutput          : [out] The OLE object to call when changes occurr
// DWORD*        pdwConnectionID  : [out] Unique ID to identify the event
// 
// Return Value   : S_OK if succesful
// 
OLE_Method
HRESULT  RichEditImage::DAdvise(FORMATETC*  pFormat, DWORD  dwFlags, IAdviseSink*  pOutput, DWORD*  pdwConnectionID)
{
   HRESULT  hResult;    // Operation result

   // Create events object if necessary
   if (!m_pEvents AND FAILED(hResult = CreateDataAdviseHolder(&m_pEvents)))
      return hResult;

   // Register connect using events object
   return m_pEvents->Advise(this, pFormat, dwFlags, pOutput, pdwConnectionID);
}
Exemple #3
0
ASSERTDATA


//+----------------------------------------------------------------------------
//
//      Member:
//              CDataAdviseCache::CreateDataAdviseCache, static public
//
//      Synopsis:
//              Creates an instance of the CDataAdviseCache
//
//      Arguments:
//              [pp] -- pointer to a location to where to return the
//                      newly created CDataAdviseCache
//
//      Returns:
//              E_OUTOFMEMORY, S_OK
//
//      Notes:
//
//      History:
//              11/02/93 - ChrisWe - file cleanup and inspection
//
//-----------------------------------------------------------------------------

#pragma SEG(CreateDataAdviseCache)
FARINTERNAL CDataAdviseCache::CreateDataAdviseCache(LPDATAADVCACHE FAR* pp)
{
	VDATEHEAP();

	VDATEPTRIN(pp, LPDATAADVCACHE);

	// try to allocate the CDataAdviseCache
	if(NULL == (*pp = new DATAADVCACHE))
		return ReportResult(0, E_OUTOFMEMORY, 0, 0);

	// initialize the DataAdviseHolder member
	if(CreateDataAdviseHolder(&((*pp)->m_pDAH)) != NOERROR)
	{
		// free the DataAdviseCache
		delete *pp;
		*pp = NULL;

		return ReportResult(0, E_OUTOFMEMORY, 0, 0);
	}

	return(NOERROR);
}