Compartilhar via


Classe IDispEventSimpleImpl

Essa classe fornece implementações do IDispatch métodos, sem atrapalhar digite as informações de uma biblioteca de tipos.

template <
   UINT nID,
   class T,
   const IID* pdiid
>
class ATL_NO_VTABLE IDispEventSimpleImpl :
   public _IDispEventLocator<nID, pdiid>

Parâmetros

  • nID
    Um identificador exclusivo para o objeto de fonte.Quando IDispEventSimpleImpl é a classe base para um controle composto, usar a ID de recurso do controle contido desejada para este parâmetro. Em outros casos, use um inteiro positivo arbitrário.

  • T
    Classe do usuário, que é derivada de IDispEventSimpleImpl.

  • pdiid
    O ponteiro para o IID do evento dispinterface implementada por esta classe.

Comentários

IDispEventSimpleImpl Fornece uma maneira de implementar um dispinterface de eventos sem exigir que você forneça o código de implementação para cada método/evento nessa interface. IDispEventSimpleImpl fornece implementações da IDispatch métodos. Você só precisa fornecer implementações para os eventos que você está interessado em tratamento.

IDispEventSimpleImpl funciona em conjunto com o MAP de coletor de evento na sua classe aos eventos de rota para a função de manipulador apropriado.Para usar essa classe:

  • Adicionar um SINK_ENTRY_INFO macro para o MAP de coletor de evento para cada evento em cada objeto que você deseja manipular.

  • Fornecer informações de tipo para cada evento, transmitindo um ponteiro para um _ATL_FUNC_INFO estrutura sistema autônomo um parâmetro para cada entrada.Na x86 plataforma, a _ATL_FUNC_INFO.cc o valor deve ser CC_CDECL com a função de retorno de chamada chamando o método de __stdcall. (Desenvolvedores dispositivo inteligente, consulte dispositivo inteligente Developer observações abaixo).

  • De telefonarDispEventAdvise para estabelecer a conexão entre o objeto de fonte e a classe base.

  • De telefonarDispEventUnadvise para interromper a conexão.

Você deve derivar de IDispEventSimpleImpl (usando um valor exclusivo para nID) para cada objeto para os quais você precisa manipular eventos. A classe base pode ser reutilizado por unadvising contra um objeto de fonte e, em seguida, avisando em relação a um objeto de fonte diferente, mas o número máximo de objetos de fonte pode ser tratado por um único objeto de uma só vez é limitado pelo número de IDispEventSimpleImpl classes base.

IDispEventSimplImpl oferece a mesma funcionalidade que IDispEventImpl, exceto que ele não obtém informações de tipo sobre a interface de uma biblioteca de tipos.Os assistentes de geram o código com base apenas em IDispEventImpl, mas você pode usar IDispEventSimpleImpl adicionando o código manualmente. Use IDispEventSimpleImpl Quando não tiver uma biblioteca de tipos descrevendo a interface de eventos ou deseja evitar a sobrecarga associada usando a biblioteca de tipo.

Observação:

IDispEventImpl e IDispEventSimpleImpl fornecer sua própria implementação de IUnknown::QueryInterface permitindo que cada IDispEventImpl ou IDispEventSimpleImpl classe base para atuar sistema autônomo uma identidade separada COM e, ao mesmo tempo, permitir acesso direto aos membros da classe em seu objeto COM principal.

CE ATL a implementação do ActiveX Coletores de eventos só dá suporte a valores de retorno do tipo HRESULT ou retorno de void de seus métodos de manipulador de eventos; qualquer Outros valor não é suportado e seu comportamento é indefinido.

Para obter mais informações, consulte Suporte IDispEventImpl.

Requisitos

Cabeçalho: atlcom.h

Anotações Developer Dispositivo Inteligente

IDispEventSimpleImpl requer o _ATL_FUNC_INFO.cc membro a ser CC_STDCALL mas CE suporta somente CC_CDECL. Embora essa seja uma contradição aparente, Pocket PC, o retorno de chamada funciona independentemente do _ATL_FUNC_INFO.cc valor ou uma convenção de chamada do método de retorno de chamada. O exemplo a seguir demonstra um manipulador de eventos de exemplo para Pocket PC:

_ATL_FUNC_INFO Event1Info1 = { CC_CDECL, VT_EMPTY, 1, { VT_I4 } };

class CEventHandler :
   public IDispEventSimpleImpl<1234, CEventHandler, &__uuidof(DMyEventMakerEvents)>
{
public:
   BEGIN_SINK_MAP(CEventHandler)
      SINK_ENTRY_INFO(1234, __uuidof(DMyEventMakerEvents), 1, 
         &CEventHandler::OnEvent1, &Event1Info1)
   END_SINK_MAP()

   void __stdcall  OnEvent1(LONG l)
   {
      if (l != 445533)
      {
         OutputDebugString(L"l is not 445533\n");
      }
   }

   HRESULT Advise1234(IUnknown * punk) 
   {
      return IDispEventSimpleImpl<1234, CEventHandler, 
         &__uuidof(DMyEventMakerEvents)>::DispEventAdvise(punk);
   }
};

Consulte também

Referência

Estrutura _ATL_FUNC_INFO

Classe IDispatchImpl

Classe IDispEventImpl

SINK_ENTRY_INFO

Outros recursos

IDispEventSimpleImpl membros

Visão geral do ATL classe