Notificações de suporte
Implementando Interfaces de ponto de conexão no provedor e consumidor
Para implementar notificações, uma classe de provedor deve herdar de IRowsetNotifyCP e IConnectionPointContainer.
IRowsetNotifyCPimplementa o site do provedor de interface de ponto de conexão IRowsetNotify.IRowsetNotifyCPimplementa funções para informar ouvintes sobre o ponto de conexão de difusão IID_IRowsetNotify de alterações no conteúdo do conjunto de linhas.
Observe que você também deve implementar e registrar IRowsetNotify no consumidor (também conhecido como o coletor) usando IRowsetNotifyImpl para que o consumidor pode manipular notificações.Para obter informações sobre como implementar a interface de ponto de conexão do consumidor, consulte Recebendo notificações.
Além disso, a classe também deve conter um mapa que define a entrada de ponto de conexão, como este:
BEGIN_CONNECTION_POINT_MAP
CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP
Adicionando IRowsetNotify
Adicionar IRowsetNotify, você precisará 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:
Observação |
---|
O exemplo de código pode diferir do que está 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>
Definindo entradas de mapa COM
Você também precisa adicionar o seguinte ao mapa de COM em seu conjunto de linhas:
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
Essas macros permitem que qualquer pessoa chamando QueryInterface para o recipiente de ponto de conexão (a base de IRowsetNotify) para localizar a interface solicitada no seu provedor.Para obter um exemplo de como usar pontos de conexão, consulte o exemplo de POLÍGONO de ATL e tutorial.
Definindo entradas de mapa de ponto de conexão
Você também precisará adicionar um mapa de ponto de conexão.Deve ser algo assim:
BEGIN_CONNECTION_POINT_MAP(rowset-name)
CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()
Este mapa de ponto de conexão permite que um componente procurando o IRowsetNotify interface para encontrá-la no seu provedor.
Definindo propriedades
Você também precisa adicionar as seguintes propriedades ao seu provedor.Você só precisa adicionar propriedades com base em interfaces de suporte.
Propriedade |
Adicionar se você 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 da implementação para as notificações já está incorporado em OLE DB Provider modelos.Devido a um recurso do compilador no Visual C++.NET, se você não adicionar IRowsetNotifyCP a sua cadeia de herança, o compilador remove todo código de seu fluxo de compilação, tornando seu tamanho código menor.