Notificações de suporte.
A implementação de 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 para a interface de ponto de conexão IRowsetNotify. IRowsetNotifyCPfunções para informar os ouvintes no ponto de conexão de difusão implementa IID_IRowsetNotify de alterações no conteúdo do conjunto de linhas.
Observe que você também deve implementar e registrar IRowsetNotify o 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
A adição de IRowsetNotify
Para adicionar IRowsetNotify, você precisará adicionar IConnectionPointContainerImpl<rowset-name> e IRowsetNotifyCP<rowset-name> em sua cadeia de herança.
Por exemplo, aqui está a cadeia de herança para RUpdateRowset na UpdatePV:
Observação |
---|
O código de exemplo pode diferir do que está listado aqui. Você deve considerar o código de exemplo de 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 de configuração de mapa de COM
Você também precisará adicionar o seguinte para o 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 encontrar a interface solicitada no provedor. Para obter um exemplo de como usar os pontos de conexão, consulte o exemplo de POLÍGONO de ATL e o tutorial.
Definindo entradas de mapa de ponto de conexão
Você também precisará adicionar um mapa de ponto de conexão. Ele 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 localizá-lo no seu provedor.
Setting Properties
Você também precisará adicionar propriedades a seguir ao seu provedor. Você só precisará adicionar propriedades com base nas interfaces que você dá suporte.
Property |
Adicionar se você oferece 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á é incorporado nos 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 seu fluxo de compilação, tornando o tamanho do seu código menores.