Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#3

Re: warum HookHandle global machen?

  Alt 15. Apr 2006, 14:31
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
  Mit Zitat antworten Zitat