Compilerfehler C3825
'Klasse': Eine verwaltete Klasse kann nur verwaltete Ereignisse unterstützen
In verwalteten Klassen werden nur .NET-Ereignisse unterstützt.Um diesen Fehler zu beheben, ändern Sie den Typparameter für event_source und event_receiver von native in managed, oder entfernen Sie das Attribut.
Beispiel
Im folgenden Beispiel wird C3825 generiert:
// 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);
}
Bei Managed Extensions for C++ können Sie auch __gc aus den Klassendeklarationen entfernen, sodass die Klassen nicht der Garbage Collection unterliegen.
Im folgenden Beispiel wird C3825 generiert:
// C3825b.cpp
// compile with: /clr:oldSyntax
[event_source(native)] // To fix, change 'native' to 'managed'
// or, remove __gc from class
__gc class CEventSrc
{
public:
__event void event1(); // C3825
void FireEvents() {
event1();
}
};
[event_receiver(native)] // To fix, change 'native' to 'managed'
// or, remove __gc from class
__gc class CEventRec
{
public:
void handler1()
{
System::Console::WriteLine("Executing handler1().\n");
}
void HookEvents(CEventSrc* pSrc)
{
__hook(&CEventSrc::event1, pSrc, &CEventRec::handler1);
}
void UnhookEvents(CEventSrc* pSrc)
{
__unhook(&CEventSrc::event1, pSrc, &CEventRec::handler1);
}
};
int main()
{
CEventSrc* pEventSrc = new CEventSrc;
CEventRec* pEventRec = new CEventRec;
pEventRec->HookEvents(pEventSrc);
pEventSrc->FireEvents();
pEventRec->UnhookEvents(pEventSrc);
}