VisualC ADO数据库编程入门(3)计算机等级考试

文章作者 100test 发表时间 2010:01:01 13:01:08
来源 100Test.Com百考试题网


  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.

  }


相关文章


Windows消息机制要点计算机等级考试
Huffman编码的实现计算机等级考试
VisualC ADO数据库编程入门(5)计算机等级考试
VisualC ADO数据库编程入门(4)计算机等级考试
VisualC ADO数据库编程入门(3)计算机等级考试
VisualC ADO数据库编程入门(2)计算机等级考试
VisualC ADO数据库编程入门(1)计算机等级考试
VisualC ADO数据库编程入门计算机等级考试
使用VC 压缩解压缩文件夹计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛