分享方式:


編譯器警告 (層級 1) C4683

' function ': 事件來源具有 'out'-parameter;在連結多個事件處理常式時請小心

備註

如果多個事件接收正在接聽 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
};