Laden Sie die gleiche dll-mehrfach
Will ich laden Sie die gleiche dll-z.B. Lib.dll mehrere Male!
-> erstellen Sie einen neuen Prozess (CreateProcess-Funktion) für jede LoadLibrary!
Jemand ein Beispiel oder ein paar Hinweise?!
Thx und greets
- Warum wollen Sie laden Sie die gleiche DLL-mehrere Male?
- Warum genau würden Sie wollen, laden Sie es mehrere Male? Sie können nicht laden Sie es mehrere Male in den gleichen Prozess. Sie können mehrere Prozesse, und in der "logischen Sinn" es wird einmal geladen werden für jeden Prozess. Beachten Sie, dass im "physikalischen" Sinne, es ist vielleicht noch einmal geladen-das Betriebssystem wird versuchen, laden Sie es einmal und verwenden Sie den gleichen Speicher, in dem alle Prozesse (nur die Lesen nur Teile natürlich, wie code und statische, unveränderliche Daten, alles, was wandelbar ist, wird durch die Notwendigkeit sein, die Prozess-spezifisch).
- Die dll selbst eine andere dll laden; aber es kommt auf die parameter des Aufrufs, die man zu laden. Also brauche ich mehrere Instanzen!
- Ich weiß. Dies ist der Grund, warum ich geschrieben habe, wie kann ich erkennen, das mit CreateProcess (mehr als 1 Prozess)!
- Dann sollten Sie Umdenken in der Architektur, vielleicht mit "session" - system oder mit COM-Objekt.
- gut, ist Ihr problem, wie man die dll laden mehrere Male, oder ist es, wie Sie einen Prozess erstellen. Wenn Sie nicht wissen, wie Sie einen Prozess erstellen, das ist, was Sie Fragen sollten (und poste den code, den Sie versucht zu verwenden).
- stackoverflow.com/questions/3497516/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt es wie Sie möchten, dass jede Instanz der DLL separate Daten-Segmente. Das ist der einzige Grund, warum ich denken kann, für die Frage.
Der einzige Weg dies zu erreichen ist, um sicherzustellen, dass jedes mal, wenn Sie anrufen
LoadLibrary
die DLL hat einen anderen Dateinamen. Kopieren Sie die DLL in eine temporäre Datei, die jedes mal, wenn Sie brauchen, um es zu laden, so dass Sie sicher, dass der name, den Sie verwenden, ist anders als jede geladene Instanz der DLL.Ich echo die Kommentaren oben, dass Sie ermutigen, sich zu re-design der system Architektur.
Können Sie nicht laden Sie die gleiche DLL, die mehrere Male in einem einzigen Prozess (oder auch nicht und haben keine Wirkung).
Aus Ihren Kommentaren, die DLL macht verschiedene Dinge abhängig von einer der Funktion Aufrufe, so werden Sie brauchen, um eine "Sitzung" - system, in dem Sie separate Datensätze für jede und erstellen Ihnen bei Bedarf (über einen Anruf), und ein handle übergeben oder ähnlich jedem Aufruf der Funktion. Dies ist der Weg, die meisten Win32-API funktioniert (Datei-handles, Fenster, Griffe, GDI-Objekte, etc)
Wenn Sie eine COM-DLL-host-und COM-Objekte verwenden, dann wird automatisch behandelt, indem jeder Instanz der Klasse.
Wenn Sie möchten, verwenden Sie einen separaten Prozess, dann können Sie genau das tun, indem er einen neuen Prozess gestartet, nur um die Ausrichtung der DLL und nutzen Sie eine der vielen Formen des IPC zu kommunizieren.
Werden Sie die Behandlung, eine DLL wie eine Objekt-Instanz. Das ist überhaupt nicht so, wie DLLs arbeiten. DLLs sind keine Objekte, Sie sind ein Haufen von code und Ressourcen. Diese Dinge ändern sich nicht, egal wie viele Male Sie könnte theoretisch eine DLL laden. Somit gäbe es keinen Sinn, mehrere Instanzen der DLL im gleichen Prozess geladen.
Dies ist ein gutes Beispiel, warum Globale Variablen tendenziell eine schlechte Idee. Daten muss in der Lage sein, um instanziiert zu werden, wie gebraucht.
So, wenn Sie mehrere Instanzen von einem Objekt zu arbeiten, sollten Sie das design der DLL, genau das zu tun. Wie schon andere gesagt haben, eine Art session, oder einfach ein Objekt, das Sie instanziieren können, Wann immer Sie wollen.
Dies ist eine abstrakte Antwort auf eine abstrakte Fragestellung. Es würde VIEL helfen, wenn Sie erklären könnten, mehr über das, was diese DLL genau funktioniert, und warum Sie benötigen, um mehrere Instanzen.