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.
}