Compartir a través de


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);
}