Avviso del compilatore (livello 1) C4683

'function': l'origine evento ha un parametro 'out'-; prestare attenzione quando si associano più gestori eventi

Osservazioni:

Se più sink di eventi è in ascolto di un'origine evento COM, il valore di un parametro out può essere ignorato.

Tenere presente che si verificherà una perdita di memoria nelle situazioni seguenti:

  1. Se un metodo ha un parametro out allocato internamente, ad esempio BSTR *.

  2. Se l'evento ha più di un gestore (è un evento multicast).

Il motivo della perdita è che il parametro out verrà impostato da più di un gestore, ma restituito al sito di chiamata solo dall'ultimo gestore.

Esempio

L'esempio seguente genera l'errore C4683 e mostra come risolverlo:

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