Seite 1 von 1

Methode in Funktionszeiger übergeben

Verfasst: Mo Jul 05, 2010 8:33 pm
von hackmack
Hallo,

ich bin grad dabei für die "Windows-Services" aus der WINAPI ein OOP Gerüst drumherum zu flickern, damit die sich besser verwenden lassen. Dabei habe ich zur Zeit folgendes Problem:

RegisterServiceCtrlHandler möchte von mir als zweiten Parameter einen Funktionszeiger auf eine Funktion mit dem Prototypen

Code: Alles auswählen

VOID WINAPI Handler(
  __in  DWORD fdwControl
);
haben. Allerdings würde ich gerne als Funktion eine (nicht statische) Methode aus der Klasse "service" verwenden (bspw. service::handler(DWORD handle)). Gibt's da irgendwelche Möglichkeiten, wie man das machen könnte?

Mfg.
hackmack

Re: Methode in Funktionszeiger übergeben

Verfasst: Mo Jul 05, 2010 9:43 pm
von Xin
hackmack hat geschrieben:Allerdings würde ich gerne als Funktion eine (nicht statische) Methode aus der Klasse "service" verwenden (bspw. service::handler(DWORD handle)). Gibt's da irgendwelche Möglichkeiten, wie man das machen könnte?
Nein, die gibt es in C/C++ leider nicht.

Das Problem habe ich auch bereits identifiziert und für Genesys eine schnelle Lösung erarbeitet. In C/C++ musst Du allerdings aus den Argumenten, also das Handle, herausfinden, welches Objekt Du verwendest. Hier kannst Du beispielsweise eine statische std::map verwenden, wenn Du das Handle bereits kennst und das Handle als Key reingeben und das Objekt als Value. In der statischen Funktion kannst Du so mit dem Handle das Objekt aus der Map herausholen.