Compartir a través de


Advertencia del compilador (nivel 1) C4683

'function': el origen de eventos tiene un parámetro 'out'; tenga cuidado al enlazar varios controladores de eventos

Comentarios

Si hay varios receptores de eventos que escuchen un origen del evento COM, se puede omitir el valor de un parámetro out.

Tenga en cuenta que se producirá una fuga de memoria en las situaciones siguientes:

  1. Si un método tiene un parámetro out que se ha asignado internamente, por ejemplo, BSTR *.

  2. Si el evento tiene más de un controlador (es un evento de multidifusión).

El motivo de la fuga es que varios controladores establecerán el parámetro out, pero solo lo devolverá al sitio de llamada el último controlador.

Ejemplo

El siguiente ejemplo genera el error C4683 y muestra cómo repararlo:

// 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
};