Adicionando pontos de conexão a um objeto
The Tutorial do ATL demonstra como criar um controle com suporte para pontos de conexão, como adicionar eventos e, em seguida, como implementar o ponto de conexão.ATL implementa pontos de conexão com a IConnectionPointImpl classe.
Para implementar um ponto de conexão, você tem duas opções:
Implementar sua própria fonte do evento de saída, adicionar um ponto de conexão para o controle ou objeto.
Reutilize uma interface de ponto de conexão definida na biblioteca de tipos de outro.
Em ambos os casos, o Assistente para ponto de conexão implementar usa uma biblioteca de tipos para fazer seu trabalho.
Defina um dispinterface no bloco de biblioteca do arquivo .idl.Se você ativou o suporte para pontos de conexão quando criou o controle com o Assistente de controle ATL, a dispinterface já será criado.Se você não ativou o suporte para pontos de conexão quando criou o controle, adicione manualmente um dispinterface no arquivo .idl.A seguir é um exemplo de um dispinterface.Interfaces de saída não são necessárias ser interfaces dispatch mas muitas linguagens de script sistema autônomo, por exemplo, VBScript e JScript exigem isso, portanto, este exemplo usa dois dispinterfaces:
[ uuid(3233E37D-BCC0-4871-B277-48AE6B61224A), helpstring("Buddy Events") ] dispinterface DBuddyEvents { properties: methods: };
Use o guidgen.exe ou uuidgen.exe utilitário para gerar um GUID.
Adicionar a dispinterface sistema autônomo a [default,source] interface em coclass para o objeto no arquivo de .idl do projeto. Novamente, se você ativou o suporte para pontos de conexão quando criou o controle, o Assistente de controle ATL criará o [default,source] entrada. Para adicionar manualmente essa entrada, adicione a linha em negrito:
coclass Buddy { [default] interface IBuddy; [default,source] dispinterface DBuddyEvents; };
Consulte o arquivo .idl no Circ Exemplo de ATL para obter um exemplo.
Use a classe View para adicionar métodos e propriedades para a interface de eventos.Right-click the class in Class View, point to Add on the shortcut menu, and click Add Connection Point.
No Interfaces de fonte caixa de listagem de implementar ponto de conexão assistente, selecionar Interfaces do projeto.Se você escolher uma interface para o seu controle e pressione OK, você irá:
gerar um arquivo de cabeçalho com uma classe de proxy do evento que implementa o código que faça chamadas de saída para o evento.
Adicione uma entrada para o MAP de ponto de conexão.
Você também verá uma lista de todas as bibliotecas de tipos no seu computador.Somente você deve usar uma dessas outras bibliotecas de tipo para definir o ponto de conexão se você deseja implementar a interface de saída mesma exata encontrada em Outros biblioteca de tipos.
In Class View, right-click a class that implements a BEGIN_COM_MAP macro, point to Add on the shortcut menu, and click Add Connection Point.
No Assistente para ponto da conexão de implementar, selecionar uma biblioteca de tipos e uma interface na biblioteca de tipos e clicar Adicionar.
Edite o arquivo .idl como:
Copie a dispinterface do arquivo .idl para o objeto cuja fonte de evento está sendo usada.
Use o importlib instruções sobre sistema autônomo essa biblioteca de tipos, sistema autônomo mostrado abaixo.Este exemplo é de um arquivo .idl que está usando o ponto de conexão do controle CDispServer.
importlib("..\..\NVC_ATL_CDispServer\Cpp\_DispServer.tlb"); //**** add this line [ uuid(16D6CEFE-77A3-4914-B72A-E8D788ECDDC3), helpstring("MyDispEventClass Class") ] coclass MyDispEventClass { [default] interface IMyDispEventClass; [default,source] dispinterface _IDispServEvents; //**** and this one };