Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.
  • Autor

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

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 ;)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.