Partilhar via


Dando suporte a notificações

Implementando o ponto de conexão faz interface no provedor e o consumidor

Para implementar notificações, uma classe do provedor deve herdar de IRowsetNotifyCP e de IConnectionPointContainer.

IRowsetNotifyCP implementa ao site do provedor para a interface IRowsetNotifydo ponto de conexão. IRowsetNotifyCP implementa funções difundidas para recomendar ouvintes no ponto de conexão IID_IRowsetNotify as alterações para o conteúdo do conjunto de linhas.

Observe que você também deve implementar e registrar IRowsetNotify no consumidor (também conhecido como o coletor) que usa IRowsetNotifyImpl de modo que ele possa controlar notificações. Para obter informações sobre como implementar a interface do ponto de conexão no consumidor, consulte Recebendo notificações.

Além disso, a classe também deve conter um mapa que define a entrada do ponto de conexão, desta forma:

BEGIN_CONNECTION_POINT_MAP
   CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP

Adicionando IRowsetNotify

Para adicionar IRowsetNotify, você precisa adicionar IConnectionPointContainerImpl<rowset-name> e IRowsetNotifyCP<rowset-name> a sua cadeia de herança.

Por exemplo, aqui está a cadeia de herança para RUpdateRowset em UpdatePV:

Dica

O código de exemplo pode ser diferente do que é listado aqui; você deve considerar o código de exemplo como a versão mais atualizada.

///////////////////////////////////////////////////////////////////////////
// class RUpdateRowset (in rowset.h)

class RUpdateRowset : 
public CRowsetImpl< RUpdateRowset, CAgentMan, CUpdateCommand, 
         CAtlArray< CAgentMan, CAtlArray<CAgentMan> >, CSimpleRow, 
         IRowsetScrollImpl< RUpdateRowset, IRowsetScroll > >,
      public IRowsetUpdateImpl< RUpdateRowset, CAgentMan >,
      public IConnectionPointContainerImpl<RUpdateRowset>,
      public IRowsetNotifyCP<RUpdateRowset>

Entradas do mapa do COM configuração

Você também precisa unir o seguinte ao mapa COM no conjunto de linhas:

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

Esses macros permitem qualquer um que chama QueryInterface do respectivo contêiner do ponto de conexão (a base de IRowsetNotify) para localizar a interface solicitada do provedor. Para obter um exemplo de como usar pontos de conexão, consulte o exemplo e o tutorial de POLYGON de ATL.

Entradas do mapa do ponto de conexão de configuração

Você também precisa adicionar um mapa de ponto de conexão. Deve ser algo como:

BEGIN_CONNECTION_POINT_MAP(rowset-name)
     CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()

Esse mapa do ponto de conexão permite um componente que procura a interface de IRowsetNotify para localizá-la do provedor.

Definindo propriedades

Você também precisa unir as seguintes propriedades ao provedor. Você só precisará adicionar propriedades com base nas interfaces que você tem suporte.

Propriedade

Se você adicionar suporte

DBPROP_IConnectionPointContainer

Sempre

DBPROP_NOTIFICATIONGRANULARITY

Sempre

DBPROP_NOTIFICATIONPHASES

Sempre

DBPROP_NOTIFYCOLUMNSET

IRowsetChange

DBPROP_NOTIFYROWDELETE

IRowsetChange

DBPROP_NOTIFYROWINSERT

IRowsetChange

DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE

Sempre

DBPROP_NOTIFYROWFIRSTCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWSETRELEASE

Sempre

DBPROP_NOTIFYROWUNDOCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWUNDODELETE

IRowsetUpdate

DBPROP_NOTIFYROWUNDOINSERT

IRowsetUpdate

DBPROP_NOTIFYROWUPDATE

IRowsetUpdate

A maioria de implementação para notificações já é inserida em modelos do provedor OLE DB. Devido a um recurso do compilador do Visual C++ .NET, se você não adicionar IRowsetNotifyCP a sua cadeia de herança, o compilador remove todo o código de seu fluxo de compilação, tornando seu tamanho menor de código.

Consulte também

Conceitos

Técnicas de provedor avançadas