设为首页 加入收藏

TOP

c++辅导:VisualC++ADO数据库编程入门(3)
2014-11-20 04:50:26 】 浏览:1169
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;


  }


  STDMETHODIMP_(ULONG) CConnEvent::AddRef() { return ++m_cRef; };


  STDMETHODIMP_(ULONG) CConnEvent::Release()


  {


  if (0 != --m_cRef) return m_cRef;


  delete this;


  return 0;


  }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c++辅导:VisualC++ADO数据库编程.. 下一篇c++辅导:VisualC++ADO数据库编程..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目