Compilerwarnung (Ebene 1) C4683
'function': Die Ereignisquelle verfügt über einen "out"-Parameter. Achten Sie beim Verknüpfen mehrerer Ereignishandler auf Vorsicht.
Hinweise
Wenn mehrere Ereignissenken auf eine COM-Ereignisquelle lauschen, wird der Wert eines Out-Parameters möglicherweise ignoriert.
Beachten Sie, dass in den folgenden Situationen ein Speicherverlust auftritt:
Wenn eine Methode über einen out-Parameter verfügt, der intern zugeordnet ist, z. B. ein BSTR *.
Wenn das Ereignis mehrere Handler hat (ist ein Multicastereignis).
Der Grund für den Verlust besteht darin, dass der Ausgabeparameter von mehreren Handlern festgelegt wird, aber nur vom letzten Handler an die Aufrufwebsite zurückgegeben wird.
Beispiel
Im folgenden Beispiel wird C4683 generiert und veranschaulicht, wie sie behoben werden:
// 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
};
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für