Zitat:
Wieso kann dann nicht auch jeder Prozess seinen eigenen
Handle auf seine eigene Kopie haben?
Du siehst einen Widerspruch wo keiner ist. Jeder Prozess hat sein eigenes Datensegment und eine globale Variable in diesem Prozess wäre eine "eigene Kopie für jeden Prozess". Eine
DLL die in mehreren Prozessen geladen wurde und in der
DLL selber eine globale Variable ablegt, hat defakto für jeden Prozess in dem sie geladen wurde ein eigenes Datensegment und ergo eine eigene Kopie pro Prozess von diesem Datensegment und ergo auch Prozessbezogene Kopien dieser globalen Variablen.
Die Benuztung von globalen Variablen ist also in diesem Zusammenhang nichts widersprüchliches sondern nur konsequent.
Wenn also ein Prozess eine
DLL lädt dann wird zwar der Code dieser
DLL in den meisten Fällen gemeinsam durch alle Prozesse die die gleiche
DLL geladen haben, auch gemeinsam benutzt. Die Datensegment dieser
DLL werden aber quasi als "Kopien" für jeden Prozess indiviuell "dupliziert".
Es entsteht also nicht das Problem eine globale Variable einer
DLL für jeden Prozess separat zu halten, sondern umgekehrt "wie kann eine solche
DLL, Prozess-übergreifend, bzw. Prozess-unabhängig eine globale Variable" implementieren. Das wird meistens durch Sharded Segemente in den DLLs erledigt. Geht aber eben nur in einer Programmiersprache die erstens eine solche Möglichkeit bieten und zweitens auch einen Linker enthält der sowas unterstützt. Beides ist in Delphi nicht der Fall. Also muß man den "umständlichen" Weg gehen und über MMFs, Semaphore, Events, Threads und gloable
Mutex gehen.
Gruß Hagen