DLL: Globale Variable in CallBack Funktion verwenden

Hallo,

habe eine HookDLL geschrieben.
In der gibt es unter anderem eine Install Funktion die mit ein char* Parameter aufgerufen wird.
Code:
Install(char *c[]){

In dieser Funktion wird SetWindowsHookEx(...) aufgerufen.
Der char* Parameter wird in einer Globale static Variable gespeichert.

In der CallBack Funktion wird dann auf die Globalen static Variable zugegriffen.
Nur in dieser CallBack Funktion hat die Variable den Übergebenen Wert verloren

Was mache ich falsch bzw wie kann ich dieses Problem beheben.
Danke im voraus.
 
Was genau speicherst Du in der globalen Variablen?
Wenn Du den übergebenen Zeiger auf das Array dort speicherst, dann kann es natürlich sein, das das übergebene Array beim Aufruf der Callbackfunktion schon wieder weg ist. Du solltest ein eigenes, lokales Array deklarieren und das übergebene Array dorthineinkopieren. Dann sollte es gehen. Wenn es ein nullterminierter String ist, dann mußt Du auch nicht die Länge des Arrays übergeben.
 
Hallo,

Danke für deine Antwort.
In dieser Globalen Variable speichere ich einfach einen Dateipfad.
Code:
char *m_file
den übergebenen Wert speichere ich in der Install Funktion.
In dieser wird der Wert in die Globale Variable gespeichert.
Code:
m_file=*file;
Meines erachtens ist das ausreichend!!

Meinst Du mit dem eigenen Array eine feste Größe?
Könntest Du mir ein weiteren Hinweis geben.Das wäre super.
Danke für deine Bemühung.
 
Du speicherst also den übergebeben Zeiger auf Deinen Datenpfad.
s.o.->
dann kann es natürlich sein, das das übergebene Array beim Aufruf der Callbackfunktion schon wieder weg ist.
Das heißt, der Zeuger auf Deinen String ist wahrscheinlich schon ungültig, wenn die Callbackfunktion aufgerufen wird. Was Du also machen mußt, ist in der Install-Funktion eine DLL-interne Kopie des Pfades anlegen, etwa so:
Code:
int iPathLen = strlen(file);
  m_file = new char[iPathLen+1];
 strcpy(m_file, file);
Was mir gerade noch aufgefallen ist: Du übergibst der Install-Funktion einen Zeiger auf ein char-Array. Du solltest aber nur einen Zeiger auf einen char übergeben:
Code:
Install(char *c)
 
Vielen Dank jokey2 für deinen Tip.
So klappt es prima.

Aber eine Anmerkung habe ich noch bzw eine verbesserung.
Mit diesem Code
Code:
Install(char *c)
klappt es nicht, jedoch aber mit meiner Ursprüngllichen Deklaration der Funktion mittels Array.
Danke nochmal für deine Hilfe.
 
Zurück