设为首页 加入收藏

TOP

VisualC++ADO数据库编程入门(3)
2014-11-23 18:00:41 来源: 作者: 【 】 浏览:33
Tags:VisualC ADO 数据库 编程 入门

  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;


  }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VisualC++ADO数据库编程入门(2) 下一篇VisualC++ADO数据库编程入门(4)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: