2010-12-09 4 views
0

Ich habe ein Plugin, das einen Rückruf Setter wie folgt definiert:Fehler C2440: 'type cast': Konvertierung von 'überlastet-Funktion' auf 'void (__cdecl *) (void)'

extern "C" __declspec(dllexport) void set_callback(void (*fn)(void)); 

und Plugin Anrufer Klasse in Managed C++ geschrieben, die an die Callback bezieht:

typedef void (CALLBACK* _set_callback)(void (*fnc)(void)); 

public ref class Caller { 
    static void changeHandler(void); 
} 

void Caller::register() { 
    _set_callback callback; 
    callback((void (__cdecl *)(void))changeHandler); 
} 

Alles gut, bis changeHandler(void) arbeitet als statische Methode definiert. Wie man es ändert, um mit nicht-statischer Methode zu arbeiten?

Antwort

1

Edit: Es scheint, ich habe die Frage missverstanden. Angesichts der aktuellen Deklaration von set_callback, können Sie den static Modifikator nicht entfernen - das würde es zu einer Memberfunktion machen (die ein Objekt benötigt) und Sie können einen Mitgliedsfunktionszeiger nicht an eine Funktion übergeben, die nur a benötigt normaler Funktionszeiger.

+0

Die Probe, die ich in der Frage gab, funktioniert - ich möchte nur den 'statischen' Modifikator loswerden. – peo

+0

@peo: Leider funktioniert das nicht mit Ihrem aktuellen Setup. – casablanca

Verwandte Themen