컴파일러 오류 C3718
는 수신 클래스의 멤버 함수 컨텍스트에서만 'event'를 호출할 수 있습니다.
이 이벤트는 수신 클래스에서만 호출할 수 있습니다.
예시
다음 샘플에서는 C3718을 생성합니다.
// C3718.cpp
#define _ATL_ATTRIBUTES 1
#include "atlbase.h"
#include "atlcom.h"
[module(name="test")];
[object, uuid("00000000-0000-0000-0000-000000000001")]
__interface I
{
HRESULT f();
};
[event_source(com), coclass, uuid("00000000-0000-0000-0000-000000000002")]
struct E
{
__event __interface I;
};
[event_receiver(com)]
struct R
{
void b()
{
printf_s("B::bar()\n");
}
void HookAndRun(E* pE)
{
__hook(&I::f, pE->GetUnknown(), &R::b);
__raise pE->f();
}
};
int main()
{
CComObject<E>* pE;
CComObject<E>::CreateInstance(&pE);
__hook(&I::f, pE->GetUnknown(), &R::b, &r); // C3718
__raise pE->f();
// try the following lines instead
// R r;
// r.HookAndRun(pE);
}