Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Eine Dll mit zwei Programmen nutzen (https://www.delphipraxis.net/141944-eine-dll-mit-zwei-programmen-nutzen.html)

tobif 19. Okt 2009 16:22


Eine Dll mit zwei Programmen nutzen
 
Hallo,

Wie schaffe ich es eine dll zu erzeugen, die nur einmal im Speicher ist, obwohl sie von 2 Programmen geladen wird. Damit meine ich auch das alle Variablen etc. nur einmal existieren, sodass die Programme über die dll praktisch Daten austauschen können.

Wikipedia sagt dazu Folgendes:
Zitat:

Es gibt zwei verschiedene Arten, wie DLLs vom Betriebssystem in den Speicher geladen werden. Es gibt statische DLLs, die nur einmal geladen werden. Alle Programme greifen dann auf diese eine Instanz der DLL zu. Diese DLL hat dann nur einen 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). Die andere Art, wie eine DLL im Speicher verwaltet werden kann, ist die, dass jedes mal wenn ein neues Programm sie benötigt, auch eine neue Instanz von ihr in den Speicher geladen wird. Ob eine DLL statisch oder nicht ist legt ein weiteres Flag im Header der DLL fest.
Leider weis ich nicht wie das in Delphi funktioniert.

Ich hoffe Ihr könnt mir helfen.

Viele Grüße,

Tobi

Apollonius 19. Okt 2009 16:32

Re: Eine Dll mit zwei Programmen nutzen
 
In Delphi geht das nicht. In der PE-Datei kann für jede Section u.A. festgelegt werden, ob sie beschreibbar und ob sie ausführbar ist, aber auch, ob sie von verschiedenen DLL-Instanzen gemeinsam benutzt werden kann. Der Code einer DLL ist gewöhnlich ausführbar und wird gemeinsam verwendet, kann aber nicht beschrieben werden. Die Section mit den globalen Variablen nicht ausführbar, aber beschreibbar, und wird nicht gemeinsam verwendet, um die Daten zu trennen.

In C++ ist es sehr leicht, das Flag für gemeinsame Nutzung zu setzen; in Delphi ist das nicht möglich. Normalerweise verwendet man in Delphi stattdessen MMFs - das ist jedoch denkbar unelegant. Wenn der Datenaustausch jedoch der einzige Zweck der DLL ist, sind MMFs auch in C++ die bessere Variante - man spart sich die DLL komplett.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 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