Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL: Gemeinsamer Speicher? (https://www.delphipraxis.net/148574-dll-gemeinsamer-speicher.html)

blablab 4. Mär 2010 13:32


DLL: Gemeinsamer Speicher?
 
Hallo!

Ich hab ein Keyboard-Hook-Programm, das auf bestimmte Tasteneingaben reagiert. Mein Problem ist, dass dieser Hook bestimmte Einstellungen benötigt, die er aus einer INI lädt. Am Anfang hatte ich damit große Probleme und inzwischen hab ich das so verstanden: Immer wenn die dll benötigt wird, wird der Programmcode der dll in die Anwendung kopiert, die gerade im Vordergrund ist und die Tasteneingaben mitkriegt. Die globalen Variablen der dll gelten also nur in der jeweiligen Kopie der dll und ich muss somit pro Kopie der dll die INI neu laden.

Das würde ich gerne verhindern und eine Art "Gemeinsamer Speicher" verwenden auf den dann jede Kopie der dll zugreifen kann. Könnt ihr mir da bitte weiterhelfen? Wie kann ich zB ein Integer "dll-übergreifend" speichern?

Und noch eine andere Frage: Ist es vielleicht auch möglich, dass die dll gar nicht erst kopiert wird und somit nur eine Kopie der dll im Speicher ist, auf die dann alle Anwendungen direkt zugreifen?

Vielen Dank schonmal!
Grüße
blablab

Hobby-Programmierer 4. Mär 2010 14:03

Re: DLL: Gemeinsamer Speicher?
 
Zitat:

Zitat von blablab
Hallo!
Das würde ich gerne verhindern und eine Art "Gemeinsamer Speicher" verwenden auf den dann jede Kopie der dll zugreifen kann. Könnt ihr mir da bitte weiterhelfen? Wie kann ich zB ein Integer "dll-übergreifend" speichern?
blablab

Ich vermute du musst das Handle übertragen? @Astat hatte in den letzten Tagen mal den Lösungsansatz zu den KeyHooks erklärt! Suche mal den Thread oder einfach nach MemoryMappedFile ...

LG Mario

blablab 4. Mär 2010 14:32

Re: DLL: Gemeinsamer Speicher?
 
Also ich hab mir das mit dem MemoryMappedFile mal angeschaut und werds gleich mal ausprobiern. Allerdings hätte ich vorher noch eine Frage. Unz zwar ist mir noch aufgefallen, dass ich eine Boolean-Variable habe, die ich im Prinzip bei jedem Tastendruck (Taste reindrücken, Taste gedrückt lassen und Taste loslassen) überprüfen muss. Das bedeutet die Variable müsste ich ziemlich schnell zwischen den verschiedenen DLLs hin- und herschieben. Ist dazu ein MemoryMappedFile geeignet oder wäre das zB zu langsam?

himitsu 4. Mär 2010 14:44

Re: DLL: Gemeinsamer Speicher?
 
MMFs mappen einen Speicherbereich aus einer Datei (besser gesagt aus der WindowsFileCache) oder dem RAM in den virtuellen Adressraum der Anwendung.

Es gibt also sozusagen nur einen physischen Speicher, welcher bei allen Anwendungen mit einer virtuellen Speicheradressse verknüpft ist.

blablab 4. Mär 2010 14:48

Re: DLL: Gemeinsamer Speicher?
 
...das heißt es ist sehr schnell, weils im Prinzip ein ganz normaler Speicherzugriff ist. Hab ich das richtig verstanden??? :stupid:

[Edit]
@himitsu: Falls du dich auf "hin- und herschieben" beziehst, das meinte ich nicht wörtlich. Es ist ja eher speichern und laden. Ich wollte damit nur ausdrücken, dass ich oft auf die Variable zugreifen muss, sowohl lesend als auch schreibend, und da frag ich mich ob dazu MMF geeignet ist...

[Edit]
Habs inzwischen zum laufen gebracht mit MMF. Das ist ja wirklich nur ein ganz normaler Speicherzugriff. Genial! Danke für eure Hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz