Delegatinstanz bei CallBack Pointer
-
Danke an alle für die Mithilfe! Ein Programmierer allein würde elendige sterben.
Die Lösung sieht wie jetzt wie folgt aus:
CanWrapper^ myCanWrapper = gcnew CanWrapper; myReceiveMessageDelegate^ d = gcnew myReceiveMessageDelegate(myCanWrapper, &CanWrapper::ReceiveMessage); //das geht falls die methode nicht statisch ist myPtr = System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(d); Event_Receive((RECEIVE_CALLBACK)myPtr.ToPointer());
-
Noch eine kleine Fehlerquelle.
Der GC weiß nichts von nativen Funktionszeigern und gibt das delegate frei für den Mülleimer.
Um das zu verhindern musst Du entweder immer eine managed referenz auf das Objekt halten (z.B. in der Klasse als member) oder aber mit GCHandle::Allocate() und Free() selbst eine managed referenz "erzeugen".Grüße
Viel Spaß noch