Partilhar via


Aviso do compilador (nível 1) C4683

'function': a origem do evento possui um parâmetro 'out'; tome cuidado ao capturar múltiplos manipuladores de evento

Comentários

Se mais de um coletor de eventos estiver escutando uma origem do evento COM, o valor de um parâmetro out poderá ser ignorado.

Lembre-se de que ocorrerá um vazamento de memória nas seguintes situações:

  1. Se um método tiver um parâmetro out alocado internamente, por exemplo, um BSTR *.

  2. Se o evento tiver mais de um manipulador (é um evento multicast).

O motivo do vazamento é que o parâmetro out será definido por mais de um manipulador, mas apenas o último manipulador o retornará ao site de chamada.

Exemplo

A amostra a seguir gera C4683 e mostra como corrigi-lo:

// C4683.cpp
// compile with: /W1 /LD
#define _ATL_ATTRIBUTES 1
#include "atlbase.h"
#include "atlcom.h"

[ module(name="xx") ];

[ object ]
__interface I {
   HRESULT f([out] int* pi);
   // try the following line instead
   // HRESULT f(int* pi);
};

[ coclass, event_source(com) ]
struct E {
   __event __interface I;   // C4683
};