Klassenfunktionspointer als Callback an UnRAR-DLL übergeben
-
Hallo,
ich habe folgende Funktionsdeklarationen:
typedef int (CALLBACK *UNRARCALLBACK)(UINT msg, LONG UserData, LONG P1, LONG P2); void PASCAL RARSetCallback(HANDLE hArcData, UNRARCALLBACK Callback, LONG UserData);Nun möchte ich der Callback-Funktion den Funktionspointer einer nicht statischen Klassenfunktion zuweisen, aber so, wie im folgenden Versuch geht es nicht:
//--------------------------------------------------------------------------- int CALLBACK URAR::UnRAREvent(UINT msg, LONG UserData, LONG P1, LONG P2) { // } //--------------------------------------------------------------------------- void __fastcall URAR::SetCallbackFunction(HANDLE hArcData, LONG UserData) { RARSetCallback(hArcData, UnRAREvent, UserData); }Dies wird natürlich mit folgender Fehlermeldung vom Compiler verweigert:
[C++ Fehler] RAR.cpp(79): E2034 Konvertierung von 'int (__stdcall * (_closure )(unsigned int,long,long,long))(unsigned int,long,long,long)' nach 'int (__stdcall *)(unsigned int,long,long,long)' nicht möglich [C++ Fehler] RAR.cpp(79): E2342 Keine Übereinstimmung des Typs beim Parameter 'CallBack' ('int (__stdcall *)(unsigned int,long,long,long)' erwartet, 'void' erhalten)Mit einer normalen Funktion (ohne Klasse) ist das kein Problem, aber ich möchte in der Callback-Funktion auf Variablen und Funktionen der Klasse zugreifen. Wie kann ich die Funktion übergeben?
Nighthero
-
Hallo
genau das geht nicht.
Du kannst Standard-C++ Funktionpointern nicht Membermethoden zuweisen.
Dazu gibt es in BCB das Schlüsselwort __closure, was dann allerdings nicht kompatibel zu alten Callback-Funktionen ist.
Du mußt dich also entscheiden : einfache Callbackfunktion oder Membermethode.bis bald
akari