Freigeben über


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:

  1. Wenn eine Methode über einen out-Parameter verfügt, der intern zugeordnet ist, z. B. ein BSTR *.

  2. 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
};