Funktionspointerschwierigkeiten
-
Guten Abend
Was will mir mein Compiler mit folgender Aussage
'void (void *,long)' in 'void (__cdecl *)(void *,long)'genau mitteilen?
was ist (__cdecl *)?
Sinn des ganzen:
Ich habe einen Funktionenstack, der Funktionen ala
void Function1(void *Ptr, long Purpose){//}aufnehem sollte, und dies auch tut, wenn Function1 eine eigenstäntige Funktin ist.
Ich hätte nun aber gerne eine Klasse, die eine Funktion Haken(void *Ptr, long Purpose) hat, die ich dann mittels FunktionenStack.Push(MeineKlasse->Haken,...) aufnehmen würde... Erhalte dann aber die obige Fehlermeldung.
Push Funktion des FunktionenStacks sieht so aus:
FunktionenStack::Push(void (*Process)(void *Ptr, long Purpose), void *DataPtr)Besten Dank für Hilfe!
-
1. Ein paar Typedefs tun bei Funktionspointern immer gut

2. __cdecl ist eine Aufrufkonvention für Funktionen. Aufrufkonventionen bestimmen in welcher Reihenfolge Parameter auf den Stack gelegt werden und wer für das Aufräumen des Stacks zuständig ist.Dein Problem ist jetzt, dass man nicht so ganz einfach Zegier auf Klassenfunktionen (Methoden) erstellen kann, wenn die Methode nicht als static deklariert wurde.
Also: Entweder als static deklarieren oder siehe FAQ zum Thema Methodenpointer

MfG SideWinder
-
thx für die infos