LoadLibrary() und GetProcAddress() - grundsätzliche Fragen



  • Hi,

    ich glaube, ich stehe gerade ganz gewaltig auf dem Schlauch. Folgendes Problem:

    Ich habe mir eine DLL geschrieben, die Funktionen exportiert, über die sie PArameter erhält, die ihr sagen, was sie genau machen soll. Diese DLL möchte ich eigentlich als eine Art Plug-In benutzen, d.h. der User kann die gleiche DLL auch mehrfach mit unterschiedlichen Parametern einsetzen und sie soll abhängig von diesen Parametern immer was anderes tun.

    Und genau das funktioniert nicht, da diese DLL scheinbar immer nur als eine einzige Instanz existiert:

    Der erste Aufruf von LoadLibrary() und GetProcAdress() klappt prima, ich bekomme jeweils ein Handle bzw. diverse Funktionspointer zurück. Beim zweiten Aufruf dieser Funktionen wollte ich jetzt eigentlich eine eigene Instanz dieser DLL zurück bekommen - das klappt jetzt aber nicht. Hier werden der gleiche Handle und die gleichen Funktionspointer geliefert, sprich es wird exakt der gleiche Code verwendet - was natürlich grandios schief geht, wenn diese DLL abwechselnd unterschiedliche Parameter bekommt.

    Was habe ich hier übersehen? Wie kriegt man so eine saubere Trennung hin, dass die einzelnen geladenen DLLs auch unabhängig voneinander funktionieren?

    Vielleicht als Anmerkung: Ich nutze diese Funktionen nicht direkt, sondern gehe über ein Toolkit, das intern aber genau das macht ,was ich hier beschrieben habe.



  • TimTool schrieb:

    Hier werden der gleiche Handle und die gleichen Funktionspointer geliefert, sprich es wird exakt der gleiche Code verwendet - was natürlich grandios schief geht, wenn diese DLL abwechselnd unterschiedliche Parameter bekommt.

    Aus welchem Grund sollte das schiefgehen? Du kannst eine ganz normale Funktion in einem ganz normalen Programm doch auch von verschiedenen Threads aus mit verschiedenen Parametern aufrufen, und es wird immer derselbe Code verwendet.



  • Kannst Du es nicht Debuggen wegen dem 3. Party Tool Kit?
    Simon


  • Mod

    LoadLibrary liefert nie eine neue Instanz einer DLL zurück, die bereits geladen wurde.
    DLLs mit dem selben Pfad+Namen werden immer nurgenau einmal in den Speicher geladen.


Anmelden zum Antworten