Adresse auf eine Funktion herausfinden
-
Hallo zusammen, ich bin kein Experte was die Windows-API angeht und habe vielleicht eine dumme Frage:
Wie komme ich an die Adresse einer Funktion die in einer Klasse deklariert ist?
Früher habe ich immer die Funktion GetProcAddress verwendet:extern "C" __declspec(dllexport) __stdcall void myFunction(void); HOOKPROC lpfnHookProc = NULL; lpfnHookProc = GetProcAddress(GetModuleHandle("MyDll.dll"),"myFunction");Das hat funktioniert auch so weit so lange die Funktion myFunction sich nicht in einer Klasse befindet, ich benötige aber eine Adresse einer Funktion die in einer Klasse deklariert ist.
Hat jemand eine Lösung?
Vielen Dank
coder24h
-
Wenn eine Funktion *nicht* statisch in einer Klasse deklariert ist, hast Du keine Möglichkeit eine "Adresse" zu bekommen... die Implementierung ist höchst Compiler-Abhängig.
Wenn die Funktion statisch ist, dann einfach "&" verwenden.
Für Methoden in einer Klasse gibt es auf Codeproject einen guten Artikel, der das ganze "Problemfeld" beschreibt...
-
Die Problematik ist mir jetzt einigermaßen klar daher versuche ich mit den statischen Methoden und Variablen zu arbeiten, doch dass klappt ebenso wenig.
static HINSTANCE ghInst; void __stdcall myFunction(void) { HOOKPROC lpfnHookProc = NULL; lpfnHookProc = GetProcAddress(GetModuleHandle("MyDll.dll"),"myFunction"); ghhookKB = SetWindowsHookEx(WH_KEYBOARD, lpfnHookProc, ghInst, NULL); }Da die ghInst static ist, kriege ich das nicht mehr übersetzt! Bekommt Ihr das Ganze nicht mehr übersetzt. Ist das normal das die Methode SetWindowsHookEx keine statischen Instanzen der HINSTANCE verarbeiten kann?

-
Mein Fehler man muss eine statische Variable mindestens 1 mal initialisieren!
HINSTANCE ghInst = 0;Danke für die Unterstützung.

-
Hmm... bei MS VC werden statische oder globale Variablen immer mit 0 initialisiert...
-
Ist nicht nur beim MSC so, sondern gilt generell.