Error del compilador C3825
"class": una clase administrada o WinRT solo puede admitir eventos administrados o WinRT
Solo los eventos .NET son compatibles con las clases administradas. Solo los eventos de Windows en tiempo de ejecución son compatibles con las clases de Windows en tiempo de ejecución. Para corregir este error en código administrado, cambie el parámetro de tipo de event_source
y event_receiver
de native
a managed
. Otra solución sería quitar el atributo.
Ejemplo
El ejemplo siguiente genera el error C3825 y muestra cómo corregirlo:
// C3825a.cpp
// compile with: /clr
public delegate void del1();
[event_source(native)] // To fix, change 'native' to 'managed' or delete this line
ref class CEventSrc
{
public:
event del1^ event1; // C3825
void FireEvents() {
event1();
}
};
[event_receiver(native)] // To fix, change 'native' to 'managed' or delete this line
ref class CEventRec
{
public:
void handler1()
{
System::Console::WriteLine("Executing handler1().\n");
}
void HookEvents(CEventSrc^ pSrc)
{
pSrc->event1 += gcnew del1(this, &CEventRec::handler1);
}
void UnhookEvents(CEventSrc^ pSrc)
{
pSrc->event1 -= gcnew del1(this, &CEventRec::handler1);
}
};
int main()
{
CEventSrc^ pEventSrc = gcnew CEventSrc;
CEventRec^ pEventRec = gcnew CEventRec;
pEventRec->HookEvents(pEventSrc);
pEventSrc->FireEvents();
pEventRec->UnhookEvents(pEventSrc);
}