SwordMaster Geschrieben 11. September 2005 Geschrieben 11. September 2005 Hallo Leute, ich habe das Problem dass wenn ich zwei mal "LoadLibrary" auf die gleiche dll mache, dass ich dann zweimal das gleiche HINSTANCE zurückbekomme :-(. jetzt hab ich das Problem dass: wenn ich z.b. in er dll die funktion: //Codeausschnitt der dll extern "C" __declspec(dllexport) int InjectDll( ); int nummer = 0; int InjectDll( ) { nummer = nummer + 1; return nummer; } //Codeausschnitt meines Projektes HINSTANCE m_hHookDll; m_hHookDll = LoadLibraryEx("C:\\dlltest\\dll\\Debug\\dll.dll",NULL,LOAD_LIBRARY_AS_DATAFILE); HINSTANCE m_hHookDll2; m_hHookDll2 = LoadLibraryEx("C:\\dlltest\\dll\\Debug\\dll.dll",NULL,LOAD_LIBRARY_AS_DATAFILE); typedef int (*dllFunction)( ); dllFunction my; my = (dllFunction)GetProcAddress(m_hHookDll,"InjectDll"); my(); my = (dllFunction)GetProcAddress(m_hHookDll2,"InjectDll"); my(); eigentlich bräuche ich zwei "Instanzen" der Dll. denn so wie es jetzt ist, gibt es die Variable "Nummer" die in der dll definiert ist nur einmal. obwohl ich zwei LoadLibrarys gemacht habe. => es wird immer die gleiche "Nummer"-Variable erhöht. Kann irgendwie LoadLibrary auf die dll so machen dass die dll wirklich zwei mal komplett geladen wird? dass es dann auch entsprechend die Variablen in der dll zweimal gibt? Wär toll wenn jemand helfen könnte :-). Ciao SwordMaster Zitieren
Klotzkopp Geschrieben 11. September 2005 Geschrieben 11. September 2005 ich habe das Problem dass wenn ich zwei mal "LoadLibrary" auf die gleiche dll mache, dass ich dann zweimal das gleiche HINSTANCE zurückbekomme :-(.Das ist Absicht. "Behaviour by design", wie man so schön sagt. m_hHookDll = LoadLibraryEx("C:\\dlltest\\dll\\Debug\\dll.dll",NULL,LOAD_LIBRARY_AS_DATAFILE); // ... my = (dllFunction)GetProcAddress(m_hHookDll,"InjectDll");[/code] Wenn du eine DLL mit LOAD_LIBRARY_AS_DATAFILE lädst, kannst du nicht GetProcAddress benutzen. Aus einer so geladenen DLL kannst du nur Ressourcen extrahieren. eigentlich bräuche ich zwei "Instanzen" der Dll. denn so wie es jetzt ist, gibt es die Variable "Nummer" die in der dll definiert ist nur einmal. obwohl ich zwei LoadLibrarys gemacht habe. => es wird immer die gleiche "Nummer"-Variable erhöht.Wie gesagt, das ist Absicht. Wenn du die Nummer bei jedem Aufruf von LoadLibrary hochzählen willst, warum machst du das nicht in DllMain? Kann irgendwie LoadLibrary auf die dll so machen dass die dll wirklich zwei mal komplett geladen wird? dass es dann auch entsprechend die Variablen in der dll zweimal gibt?Nein. Zitieren
SwordMaster Geschrieben 11. September 2005 Autor Geschrieben 11. September 2005 danke für deine hilfe dann muss ich mir was anderes einfallen lassen :-(. das mit der nummer war nur ein kleines testbeispiel, dass ich nicht ewig viel quellcode posten muss. mein eigentliches problem besteht darin, dass ich eine dll habe, die einen message hook auf ein fremdes fenster setzt. aber wenn ich die gleiche dll benutzen möchte, und mehrere fenster auf einmal subclassen will, dann überschreibt er eben immer die globalen variablen. :-(. naja ich werd mal weiter rumprobieren. wenn ich keine andere lösung finde, muss ich mcih halt nochmal bei euch melden. :-)). P.S. das mit LOAD_LIBRARY_AS_DATAFILE hatte ich vergessen wieder rauszunehmen. hätte einfach mal alle Parameter ausprobiert in der hoffnung dass ich per loadlibrary immer eine neue instanz der dll bekomm... aber wenn ich jetzt weiß dass es absicht ist, dann brauch ichs gar nicht weiter versuchen. vielen dank nochmal. SwordMaster Zitieren
Klotzkopp Geschrieben 11. September 2005 Geschrieben 11. September 2005 aber wenn ich die gleiche dll benutzen möchte, und mehrere fenster auf einmal subclassen will, dann überschreibt er eben immer die globalen variablen. :-(. Dann darfst du dafür eben keine globalen Variablen benutzen, sondern musst dir eine passende Datenstruktur ausdenken. Ein assoziativer Container mit dem Fensterhandle als Schlüssel würde mir da zuerst einfallen Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.