Dela via


Kompilatorvarning (nivå 1) C4683

"function": händelsekällan har en "out"-parameter; var försiktig när du kopplar flera händelsehanterare

Anmärkningar

Om fler än en händelsemottagare lyssnar på en COM-händelsekälla kan värdet för en out-parameter ignoreras.

Tänk på att en minnesläcka uppstår i följande situationer:

  1. Om en metod har en out-parameter som är internt allokerad, till exempel en BSTR *.

  2. Om händelsen har fler än en hanterare (är en multicast-händelse).

Orsaken till läckan är att parametern out anges av mer än en hanterare, men returneras endast till anropsplatsen av den senaste hanteraren.

Example

Följande exempel genererar C4683 och visar hur du åtgärdar det:

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