VisualC++ADO数据库编程入门(3)
来源:优易学  2010-1-14 18:49:56   【优易学:中国教育考试门户网】   资料下载   IT书店

  1、响应ADO的通知事件

  通知事件就是当某个特定事件发生时,由Provider通知客户程序,换句话说,就是由Provider调用客户程序中的一个特定的方法(即事件的处理函数)。所以为了响应一个事件,最关键的就是要实现事件的处理函数。

  (1). 从ConnectionEventsVt接口派生出一个类

  为了响应_Connection的通知事件,应该从ConnectionEventsVt接口派生出一个类:

  class CConnEvent : public ConnectionEventsVt

  {

  private:

  ULONG m_cRef;

  public:

  CConnEvent() { m_cRef = 0; };

  ~CConnEvent() {};

  STDMETHODIMP QueryInterface(REFIID riid, void ** ppv);

  STDMETHODIMP_(ULONG) AddRef(void);

  STDMETHODIMP_(ULONG) Release(void);

  STDMETHODIMP raw_InfoMessage(

  struct Error *pError, EventStatusEnum *adStatus,

  struct _Connection *pConnection);

  STDMETHODIMP raw_BeginTransComplete(

  LONG TransactionLevel, struct Error *pError, EventStatusEnum *adStatus,

  struct _Connection *pConnection);

  ......

  };

  (2). 实现每一个事件的处理函数(凡是带raw_前缀的方法都把它实现了):

  STDMETHODIMP CConnEvent::raw_InfoMessage(

  struct Error *pError, EventStatusEnum *adStatus,

  struct _Connection *pConnection)

  {

  *adStatus = adStatusUnwantedEvent;

  return S_OK;

  };

  有些方法虽然你并不需要,但也必须实现它,只需简单地返回一个S_OK即可。但如果要避免经常被调用,还应在其中将adStatus参数设置为adStatusUnwantedEvent,则在本次调用后,以后就不会被调用了。

  另外还必须实现QueryInterface, AddRef, 和Release三个方法:

  STDMETHODIMP CConnEvent::QueryInterface(REFIID riid, void ** ppv)

  {

  *ppv = NULL;

  if (riid == __uuidof(IUnknown)││

  riid == __uuidof(ConnectionEventsVt)) *ppv = this;

  if (*ppv == NULL)

  return ResultFromScode(E_NOINTERFACE);

  AddRef();

  return NOERROR;

  }

[1] [2] [3] [4] 下一页

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训