idbasynchnotifysourceimpl.h

来自「The ATL OLE DB Provider templates only s」· C头文件 代码 · 共 114 行

H
114
字号
#ifndef __I_DB_ASYNCH_NOTIFY_SOURCE_IMPL__INCLUDED__
#define __I_DB_ASYNCH_NOTIFY_SOURCE_IMPL__INCLUDED__

#include <atlcom.h>
#include <atldb.h>
#include <atlctl.h>

///////////////////////////////////////////////////////////////////////////
// class IDBAsynchNotify 

template <class T>
class ATL_NO_VTABLE IDBAsynchNotifySourceImpl : public IConnectionPointImpl<T, &IID_IDBAsynchNotify>
{
public:

   typedef IConnectionPointImpl<T ,&IID_IDBAsynchNotify,ATL::CComDynamicUnkArray> ConnectionPoint;

   STDMETHOD(Fire_OnLowResource)(
      /*DWORD dwReserved*/)
   {
      IRowset *pRowset = (T*)this;

      IUnknown **ppUnknown = ConnectionPoint::m_vec.begin();

      while (ppUnknown < ConnectionPoint::m_vec.end())
	   {
         if (*ppUnknown != NULL)
         {
            IDBAsynchNotify *pNotify = (IDBAsynchNotify*)*ppUnknown;
      
            ATLTRACE2(atlTraceDBProvider, 0, "IDBAsynchNotifySourceImpl::Fire_OnLowResource() - %p\n", pNotify);
            
            HRESULT hr = pNotify->OnLowResource(0);           
         }
		   ppUnknown++;
	   }

      ATLTRACE2(atlTraceDBProvider, 0, "IDBAsynchNotifySourceImpl::Fire_OnLowResource() - OK\n");

      return S_OK;
   }

   STDMETHOD(Fire_OnProgress)(
      HCHAPTER   hChapter,
      ULONG      ulOperation,
      ULONG      ulProgress,
      ULONG      ulProgressMax,
      ULONG      ulAsynchPhase,
      LPOLESTR   pwszStatusText)
   {
      IRowset *pRowset = (T*)this;

      IUnknown **ppUnknown = ConnectionPoint::m_vec.begin();

      while (ppUnknown < ConnectionPoint::m_vec.end())
	   {
         if (*ppUnknown != NULL)
         {
            IDBAsynchNotify *pNotify = (IDBAsynchNotify*)*ppUnknown;
      
            ATLTRACE2(atlTraceDBProvider, 0, "IDBAsynchNotifySourceImpl::Fire_OnProgress() - %p\n", pNotify);
            
            HRESULT hr = pNotify->OnProgress(
               hChapter,
               ulOperation,
               ulProgress,
               ulProgressMax,
               ulAsynchPhase,
               pwszStatusText);
         }
		   ppUnknown++;
	   }

      ATLTRACE2(atlTraceDBProvider, 0, "IDBAsynchNotifySourceImpl::Fire_OnProgress() - OK\n");

      return S_OK;
   }


   STDMETHOD(Fire_OnStop)(
      HCHAPTER   hChapter,
      ULONG      ulOperation,
      HRESULT    hrStatus,
      LPOLESTR   pwszStatusText)
   {
      IRowset *pRowset = (T*)this;

      IUnknown **ppUnknown = ConnectionPoint::m_vec.begin();

      while (ppUnknown < ConnectionPoint::m_vec.end())
	   {
         if (*ppUnknown != NULL)
         {
            IDBAsynchNotify *pNotify = (IDBAsynchNotify*)*ppUnknown;
      
            ATLTRACE2(atlTraceDBProvider, 0, "IDBAsynchNotifySourceImpl::Fire_OnStop() - %p\n", pNotify);
            
            HRESULT hr = pNotify->OnStop(
               hChapter,
               ulOperation,
               hrStatus,
               pwszStatusText);
         }
		   ppUnknown++;
	   }

      ATLTRACE2(atlTraceDBProvider, 0, "IDBAsynchNotifySourceImpl::Fire_OnStop() - OK\n");

      return S_OK;
   }
};

#endif // __I_DB_ASYNCH_NOTIFY_SOURCE_IMPL__INCLUDED__

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?