Avertissement du compilateur (niveau 1) C4683
'function' : la source d’événement a un 'out'-parameter ; attention lors du raccordement de plusieurs gestionnaires d’événements
Notes
Si plusieurs récepteurs d’événements écoutent une source d’événement COM, la valeur d’un paramètre out peut être ignorée.
Sachez qu’une fuite de mémoire se produit dans les situations suivantes :
Si une méthode a un paramètre out alloué en interne, par exemple un BSTR *.
Si l’événement a plusieurs gestionnaires (il s’agit d’un événement multidiffusion).
La raison de la fuite est que le paramètre out sera défini par plusieurs gestionnaires, mais retourné au site d’appel uniquement par le dernier gestionnaire.
Exemple
L’exemple suivant génère l’erreur C4683 et montre comment la corriger :
// 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
};