编译器警告(等级 1)C4683

“function”: 事件源有“out”参数;当挂起多个事件处理程序时会遇到警告

注解

如果多个事件接收器正在侦听 COM 事件源,可能会忽略 out 参数的值。

请注意,以下情况下会发生内存泄漏:

  1. 如果方法具有内部分配的 out 参数,例如 BSTR*。

  2. 如果事件有多个处理程序(是多播事件)。

泄漏的原因是,out 参数将由多个处理程序设置,但仅由最后一个处理程序返回到调用站点。

示例

下面的示例生成 C4683,并演示如何修复此错误:

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