Compartilhar via


Suporte IDispEventImpl

A classe de modelo IDispEventImpl pode ser usado para fornecer suporte a coletores de ponto de conexão em sua classe ATL.Um coletor de ponto de conexão permite que sua classe manipular eventos acionados dos objetos COM externos.Esses coletores de ponto de conexão são mapeados com um evento MAP coletor, fornecido pela sua classe.

Para implementar adequadamente um coletor de ponto de conexão para sua classe, você devem concluir as seguintes etapas:

  • Importar as bibliotecas de tipos para cada objeto externo

  • Declarar o IDispEventImpl interfaces

  • Declarar um evento MAP coletor

  • Avisar e unadvise os pontos de conexão

As etapas envolvidas na implementação de um coletor de ponto de conexão são realizadas modificando somente o arquivo de cabeçalho (. h) da sua classe.

Importando as bibliotecas de tipos

Para cada objeto cujos eventos você deseja manipular externo, você deve importar a biblioteca de tipos.Esta etapa define o s evento que pode ser manipulado e fornece informações que são usadas ao declarar o evento MAP coletor.The # Import diretiva pode ser usada para fazer isso.Adicionar o necessário #import linhas de diretivas para cada interface dispatch oferecerá suporte ao arquivo de cabeçalho (. h) de sua classe.

O exemplo a seguir importa a biblioteca de tipos de um servidor COM externo (MSCAL.Calendar.7):

#import "PROGID:MSCAL.Calendar.7" no_namespace, raw_interfaces_only
Observação:

Você deve ter um separado #import demonstrativo para cada biblioteca de tipos externos que oferecerá suporte.

Declarar interfaces IDispEventImpl

Agora que você importou as bibliotecas de tipos de cada interface de distribuição, é necessário declarar separado IDispEventImpl interfaces para cada interface dispatch externo. Modificar a declaração da sua classe adicionando um IDispEventImpl declaração de interface para cada objeto externo. Para obter mais informações sobre os parâmetros, consulte IDispEventImpl.

O seguinte código declara dois dissipadores de ponto de conexão, a DCalendarEvents interface, para o objeto COM implementado pela classe CMyCompositCtrl2:

public IDispEventImpl<IDC_CALENDAR1, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>,
public IDispEventImpl<IDC_CALENDAR2, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>

Declarando um coletor evento MAP

Em ordem para as notificações de evento deve ser tratado pelo funcionamento adequado, sua classe deve rotear cada evento para seu manipulador correto.Isso é obtido, declarando um MAP de coletor de eventos.

ATL fornece várias macros, BEGIN_SINK_MAP, END_SINK_MAP, and SINK_ENTRY_EX, que tornam esse mapeamento mais fácil.O formato padrão é o seguinte:

BEGIN_SINK_MAP(comClass)

SINK_ENTRY_EX(id, iid, dispid, func)

. . . //additional external event entries

END_SINK_MAP()

O exemplo a seguir declara um evento MAP coletor com dois evento manipuladores:

BEGIN_SINK_MAP(CMyCompositCtrl2)
   //Make sure the Event Handlers have __stdcall calling convention
   SINK_ENTRY_EX(IDC_CALENDAR1, __uuidof(DCalendarEvents), DISPID_CLICK, 
      &CMyCompositCtrl2::ClickCalendar1)
   SINK_ENTRY_EX(IDC_CALENDAR2, __uuidof(DCalendarEvents), DISPID_CLICK, 
      &CMyCompositCtrl2::ClickCalendar2)
END_SINK_MAP()

A implementação está quase concluída.A última etapa aborda o aviso e unadvising das interfaces externas.

Avisando e Unadvising Interfaces IDispEventImpl

A etapa final é implementar um método que irá informar (ou unadvise) todos os pontos de conexão em momentos apropriados.Este aconselhar deve ser concluído antes que a comunicação entre clientes externos e seu objeto possa ocorrer.Antes de seu objeto se torna visível, cada interface dispatch externo suportado pelo seu objeto é consultada para interfaces de saída.Uma conexão é estabelecida e uma referência para a interface de saída é usada para manipular eventos do objeto.Esse procedimento é conhecido sistema autônomo "aconselhar."

Depois que seu objeto termina com as interfaces externas, as interfaces de saída devem ser notificadas de que eles não são mais usados por sua classe.Esse processo é conhecido sistema autônomo "unadvising."

Devido à natureza exclusiva de objetos COM, esse procedimento varia em detalhes e execução entre implementações.Esses detalhes estão além do escopo deste tópico e não são abordadas.

Consulte também

Referência

Fundamentos de objetos COM de ATL