編譯器警告 (層級 1) C4683
'function': 事件來源具有 'out'-parameter;在連結多個事件處理程式時請小心
備註
如果多個事件接收正在接聽 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
};