AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Eine Dll mit zwei Programmen nutzen
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Dll mit zwei Programmen nutzen

Ein Thema von tobif · begonnen am 19. Okt 2009 · letzter Beitrag vom 19. Okt 2009
Antwort Antwort
tobif

Registriert seit: 11. Jul 2003
27 Beiträge
 
#1

Eine Dll mit zwei Programmen nutzen

  Alt 19. Okt 2009, 16:22
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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Eine Dll mit zwei Programmen nutzen

  Alt 19. Okt 2009, 16:32
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz