Dando suporte a notificações
Implementar interfaces de ponto de conexão no provedor e no consumidor
Para implementar notificações, uma classe de provedor deve herdar do IRowsetNotifyCP e do IConnectionPointContainer.
IRowsetNotifyCP
implementa o site do provedor para a interface do ponto de conexão IRowsetNotify. IRowsetNotifyCP
implementa funções de difusão para aconselhar os ouvintes no ponto de conexão de alterações IID_IRowsetNotify
sobre o conteúdo do conjunto de linhas.
Você também deve implementar e registrar IRowsetNotify
no consumidor (também conhecido como coletor) usando IRowsetNotifyImpl para que o consumidor possa lidar com as notificações. Para obter informações sobre a implementação da interface do ponto de conexão no consumidor, confira Notificações de Recebimento.
Além disso, a classe deve ter um mapa que defina a entrada do ponto de conexão, da seguinte maneira:
BEGIN_CONNECTION_POINT_MAP
CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP
Adicionar IRowsetNotify
Para adicionar IRowsetNotify
, você precisa adicionar IConnectionPointContainerImpl<rowset-name>
e IRowsetNotifyCP<rowset-name>
à cadeia de herança.
Por exemplo, aqui está a cadeia de herança de RUpdateRowset
no UpdatePV:
Observação
O código de exemplo pode ser diferente do que está listado aqui. Você deve considerar o código de exemplo como a versão mais recente.
///////////////////////////////////////////////////////////////////////////
// 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>
Configurar entradas de mapa COM
Você também precisa adicionar o seguinte ao mapa COM em seu conjunto de linhas:
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
Essas macros permitem que qualquer pessoa que chame QueryInterface
para o seu contêiner de ponto de conexão (a base de IRowsetNotify
) encontre a interface solicitada em seu provedor. Para obter um exemplo de como usar pontos de conexão, consulte o exemplo e o tutorial da ATL POLYGON.
Configurar entradas de mapa de ponto de conexão
Você também precisa adicionar um mapa de ponto de conexão. Ele deve ser semelhante a:
BEGIN_CONNECTION_POINT_MAP(rowset-name)
CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()
Esse mapa de ponto de conexão permite que um componente que procura a interface IRowsetNotify
a encontre em seu provedor.
Definindo propriedades
Você também precisa adicionar as propriedades a seguir ao seu provedor. Você só precisa adicionar propriedades com base nas interfaces compatíveis.
Propriedade | Adicionar se você der 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 maior parte da implementação das notificações já está inserida nos Modelos de Provedor do OLE DB. Se você não adicionar IRowsetNotifyCP
à sua cadeia de herança, o compilador removerá todo esse código do fluxo de compilação, tornando o tamanho do código menor.