Hallo,
ich möchte eine dll erstellen (c++), die in ihrem Speicherbereich auch
Daten/Objekte besitzt also nicht nur Funktionen beinhaltet.
Nach meiner Kenntnis verhält sich eine dll naturgemäß ein bisschen so
wie „shared memory“ und wird normal nur 1x in den Speicher geladen,
nutzen dann mehrere Threads/Prozesse die gleiche dll wird immer auf den
selben Speicherbereich zugegriffen das heißt ohne Synchronisierung der
Daten innerhalb der dll knallt es.
Ziel ist bei mir aber, dass jedes Programm welche die dll einbindet ein
eigenen Speicherbereich der Daten der dll bekommt. Sozusagen so als
würde die dll von jedem Programm neu in einen eigenen Speicherbereich
geladen werden. Nach allem was ich bisher wusste geht das nicht.
Jetzt allerdings habe ich diese Aussage bei wiki gefunden:
https://de.wikipedia.org/wiki/Dynamic_Link_Library#DLLs_im_Speicher
Zitat:
1 | Es gibt zwei verschiedene Varianten, wie DLLs vom Betriebssystem in den Speicher geladen werden können. Es gibt statische DLLs, die nur einmal geladen werden. Alle Programme greifen dann auf diese eine Instanz der DLL zu. Diese DLL besitzt dann nur einen einzigen globalen Speicherbereich. Die Windows-Kernel-DLLs sind solche statischen DLLs, was ihnen erlaubt, das gesamte System zu verwalten (z. B. alle offenen Dateien zu überwachen). Eine andere Variante DLLs im Speicher zu verwalten, ist die, dass jedes Mal, wenn ein neues Programm eine DLL benötigt, eine neue Instanz von dieser in den Speicher geladen wird.
|
2 | Ob eine DLL statisch ist oder nicht, legt ein weiteres Flag im Header der DLL fest.
|
Die Aussage „...jedes Mal, wenn ein neues Programm eine DLL benötigt,
eine neue Instanz von dieser in den Speicher geladen wird.“ klingt für
mich nach dem was ich suche, als wäre es doch möglich eine dll zu
erstellen die von jedem Programm neu in den Speicher geladen wird.
Funktioniert das wirklich und was muss dann genau in dem Flag des
Headers stehen damit die dll jedes mal neu in den Speicher geladen wird?
Leider konnte ich dazu nirgendwo etwas finden.
Grüße