编译器警告(等级 1)C4683
“function”: 事件源有“out”参数;当挂起多个事件处理程序时会遇到警告
注解
如果多个事件接收器正在侦听 COM 事件源,可能会忽略 out 参数的值。
请注意,以下情况下会发生内存泄漏:
如果方法具有内部分配的 out 参数,例如 BSTR*。
如果事件有多个处理程序(是多播事件)。
泄漏的原因是,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
};