Methode in Funktionszeiger übergeben

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
hackmack
Beiträge: 85
Registriert: Do Mär 26, 2009 10:16 pm

Methode in Funktionszeiger übergeben

Beitrag von hackmack » Mo Jul 05, 2010 8:33 pm

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
They say, if you play a Microsoft CD backwards, you hear satanic messages. Thats nothing, cause if you play it forwards, it installs Windows.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Methode in Funktionszeiger übergeben

Beitrag von Xin » Mo Jul 05, 2010 9:43 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten