Udostępnij za pomocą


Ostrzeżenie kompilatora (poziom 1) C4683

"function": źródło zdarzeń ma parametr "out"; zachować ostrożność podczas podłączania wielu programów obsługi zdarzeń

Uwagi

Jeśli więcej niż jeden ujście zdarzeń nasłuchuje źródła zdarzeń COM, wartość parametru out może być ignorowana.

Należy pamiętać, że przeciek pamięci wystąpi w następujących sytuacjach:

  1. Jeśli metoda ma parametr out, który jest przydzielony wewnętrznie, na przykład BSTR *.

  2. Jeśli zdarzenie ma więcej niż jedną procedurę obsługi (jest zdarzeniem multiemisji).

Przyczyną przecieku jest to, że parametr out zostanie ustawiony przez więcej niż jedną procedurę obsługi, ale zwrócony do lokacji wywołania tylko przez ostatnią procedurę obsługi.

Przykład

Poniższy przykład generuje kod C4683 i pokazuje, jak go naprawić:

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