Adicionar pontos de conexão para um objeto

O Tutorial do ATL demo&nstra como criar um Controlarar com suporte para pontos de conexão, como adicionar eventos e, em seguida, como implementar o point.nbsp de conexão; IConnectionPointImpl discute como o ATL implementa um ponto de conexão.

Para implementar um ponto de conexão, você tem duas opções:

Em ambos os casos, o Assistente de ponto de conexão usa uma biblioteca de tipos para fazer o seu trabalho.

&Notanbsp;  Sempre que você adiciona um método a um dispinterface em que você já implementou um ponto de conexão, você deve recompilar the arquivo. IDL e, em seguida, siga o procedimento para adicionar um ponto de conexão para um objeto ou controle.

Para adicionar um ponto de conexão para um objeto ou controle

  1. Defina um dispinterface in the biblioteca Bloquear of the arquivo. IDL. Se você tiver selecionado a caixa de seleção Suporte a pontos de conexão na guia atributos do ATL objeto Assistente, a dispinterface já será criado. Se você não verificou a caixa de seleção Suporte a pontos de conexão , você deve adicionar manualmente um dispinterface para o. arquivo IDL. A seguir está um exemplo de um dispinterface. Interfaces externas não são obrigados a ser interfaces dispatch mas muitas linguagens de script como VBScript e JavaScript exigem isso, portanto, este exemplo usa dois dispinterfaces:
    biblioteca DProjLib { importlib("stdole32.tlb"); importlib("STDOLE2.tlb");[ uuid(57BC50F0-780B-11d1-8C44-0060083E866C), helpstring ("eventos de amigo") ] dispinterface DBuddyEvents { Propriedades: métodos: };
    
    

    Usar utilitários Uuidgen. exe ou Guidgen. exe para gerar um GUID.

  2. Adicione o dispinterface como padrão [, fonte] interface de coclass para o object.nbsp; &Novamente, se você tiver selecionado a caixa de seleção Suporte a pontos de conexão na guia atributos do ATL objeto Assistente para esse Controlarar, o assistente criará o padrão [, fonte] entrada. Para adicionar manualmente essa entrada, adicione a linha em negrito:
    coclass Buddy { interface [padrão] IBuddy;[padrão, fonte] dispinterface DBuddyEvents;}

    Consulte a. arquivo IDL no Circ ATL exemplo para obter um exemplo.

  3. Use ClassView para adicionar métodos e propriedades para a interface de evento.

  4. Após a dispi&nterface é totalmente definido, compilar o arquivo. IDL clicando a. arquivo IDL em FileView e selecionando o option.nbsp de compilação; Isto produzirá a biblioteca de tipos.

  5. Botão direito do mouse a classe &no ClassView e selecione Implementar conexão ponto.... Uma caixa de diálogo exibirá uma ou mais guias de biblioteca de tipo e cada guia irá exibir as interfaces para library.nbsp desse tipo; Se você escolhe uma interface e pressionar OK, você vai:
    • Gerar um arquivo de cabeçalho com uma classe de proxy do evento que implementa o código que fará as out-going chamadas para o evento.

    • Adicionar uma entrada para o mapa de ponto de conexão.

    • Adicionar um comentário e # Error (dizendo-lhe para substituir o parâmetro NULL com o endereço do dispID) para a lista de parâmetros de IProvideClassInfo2Impl.

    Se você &não criou sua biblioteca de tipo, você verá uma lista de todos os typelibs em seu computer.nbsp; Você só deve usar um destes outros typelibs para definir seu ponto de conexão se você deseja implementar a interface de saída mesma exata encontrada no typelib outro.  Se você construir um typelib com nenhuma interface de origem padrão no coclass, a caixa de diálogo exibirá uma mensagem de aviso não interface adequada (origem) na biblioteca de tipos de relatório.

Para implementar um ponto de conexão tomado de biblioteca de tipos do outro objeto

  1. No ClassView, botão direito do mouse em uma classe que implementa uma macro BEGIN_COM_MAP e selecione ponto de conexão de implementar no menu de atalho.

  2. Na caixa de diálogo Implementar ponto de conexão , clique em Adicionar o Typelib....

  3. Selecio&ne um dos libraries.nbsp tipo disponível; Depois de selecionar a biblioteca de tipos, você verá uma lista das interfaces disponíveis na biblioteca de tipos.

  4. Escolha uma ou mais das interfaces disponíveis e clique em OK.

  5. Edite o arquivo IDL para qualquer um:
    • Copiar a dispinterface do arquivo idl do objeto cuja origem de evento está sendo usada.

    • Use a instrução de importlib sobre essa biblioteca de tipo.

Aqui está um exemplo de um arquivo. IDL que está usando o ponto de conexão do Controlarar Circ.

[
   UUID(38BBFD91-7575-11D1-8C3C-0060083E866C),
   Version(1.0),
   HelpString ("16190 1.0 Type Library")
]
biblioteca MY16190Lib
{
   importlib("stdole32.tlb");
   importlib("STDOLE2.tlb");
   importlib("D:\\ATL25\\samples\\circ\\circ.tlb");   / / **** Adicionar esta linha [
      UUID(38BBFD9E-7575-11D1-8C3C-0060083E866C),
      HelpString ("classe de Atl16190Ctl")
   ]
   coclass Atl16190Ctl
   {
      interface [padrão] IAtl16190Ctl;
      [padrão, fonte] dispinterface _CircEvents;      / / **** e um presente
   };
}

Index