Предупреждение компилятора (уровень 1) C4683

"function": источник событий имеет параметр out; при перехвате нескольких обработчиков событий следует соблюдать осторожность.

Замечания

Если несколько приемников событий прослушивают источник событий COM, значение параметра out может быть проигнорировано.

Помните, что утечка памяти возникает в следующих ситуациях:

  1. Если метод имеет параметр out, выделенный внутренне, например BSTR *.

  2. Если событие имеет несколько обработчиков (это многоадресное событие).

Причина утечки заключается в том, что параметр out будет задан несколькими обработчиками, но возвращается на сайт вызова только последним обработчиком.

Пример

В следующем примере создается C4683 и показано, как исправить его:

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