Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Globale Variablen in mehreren DLLs (https://www.delphipraxis.net/137096-globale-variablen-mehreren-dlls.html)

Viktorii 14. Jul 2009 10:27


Globale Variablen in mehreren DLLs
 
Moin zusammen.

Ich möchte eine von mir geschriebene DLL aus wartungstechnischen Gründen in mehrere DLLs aufsplitten.

Nun bin ich leider nicht umhin gekommen globale Variablen zu verwenden, welche ich in allen/mehreren Funktionen verwende.

Gibt es eine Möglichkeit globale Variablen in mehreren DLLs zu haben?

Eine Möglichkeit die ich vielleicht sehen würde wäre ein record mit allen Variablen zu machen und sie mit CreateFileMapping und MapViewOfFile in allen DLLs 'global' zu machen / einzubinden.

Ist das praktikabel, oder gibt es da eine bessere Vorgehensweise?

vielen Dank

Bernhard Geyer 14. Jul 2009 10:48

Re: Globale Variablen in mehreren DLLs
 
Diesen Ansinn halte ich für blödsinn. Funktionalität in DLL's aufteilen und dann doch alles über globale Variablen handeln. Also entweder Funktionsblöcke soweit definieren das sie auch ohne das vorhandensein von globalen Variablen funktionieren und dann auf DLL's aufteilen oder alles in einer DLL lassen. Denn über DLL-Übergreifende globale Variablen holst du dir über sehr kurze Zeit eine gewaltige DLL-Hölle ins Haus.

turboPASCAL 14. Jul 2009 10:56

Re: Globale Variablen in mehreren DLLs
 
Zitat:

aus wartungstechnischen Gründen
Welche wären das ?

Viktorii 14. Jul 2009 11:06

Re: Globale Variablen in mehreren DLLs
 
Es ist eine DLL die für den Zugriff auf mehrere verschiedene Geräte geschrieben wurde. Nun wollte ich eine DLL haben mit allgemeinen Funktionen die für alle Geräte gelten und dann jeweils Gerätspezifische.

Ich verspreche mir von dem Aufteilen eine bessere Wartbarkeit. Muss ich was für Gerät x ändern ändert sich auch nur die dll für Gerät x. Denke und hoffe dass ich so besser den überblick behalten kann. Teilweise befinden sich die Geräte noch in der Entwickelung. Wahrscheinlich wird sich hier und da noch einiges sehr starkt ändern. Anderes, so wie die allgemeinen Funktionen werden sich wahrscheinlich nicht mehr oder nur sehr geringfügig ändern. So hoffe ich nicht so schnell in Kompatibilitätsprobleme zu kommen.

Ich regele nicht alles über globale Variablen. Bei den globalen Variablen handelt es sich lediglich um ein paar Handels und boolsche 'mutex' Variablen.

Bernhard Geyer 14. Jul 2009 12:11

Re: Globale Variablen in mehreren DLLs
 
Du hast doch schon mit Delphi-Mitteln (Units/Packages) schon sehr viele möglichkeiten die Übersichtlichkeit zu erhöhen. Mit DLL's gibts eigentlich eher Probleme da du hier sehr auf Versionen aufpassen musst. Das hauptproblem wird sein das du dann immer genau buch führen musste welche DLL-Versionen mit welchen anderen zusammenspielen und es dann gewaltig kracht wenn du mal eine ältere Version nimmst die z.B. andere globale Variablen hat.

himitsu 14. Jul 2009 12:34

Re: Globale Variablen in mehreren DLLs
 
Speicher über Modulgrenzen, seien es EXE und/oder DLL ... abgesehn von Sinn/Unsinn des Vorhanbens

z.B.:
Named-MMF (Memory Mapped Files)

oder in einer DLL Speicher reservieren und dort eine Exportfunktion bereitstellen, welche einen Zeiger darauf zurückliefert ... dann kann jeder andere die "Verwaltungs"-DLL fragen wo die Variable liegt.

Wobei hier eher soetwas wie Setter-/Getterfunktionen angebrachter wären,
wo also jeder andere sagen kann "weise der Variable diesen Wert zu" oder "gib mir Wert von der Variable".

hoika 14. Jul 2009 12:58

Re: Globale Variablen in mehreren DLLs
 
Hallo,

ohne jetzt eine Lanze für "Separierung in DLL's" zu brechen.
DLL's machen schon Sinn.
Ich benutze Sie z.B., um Schnittstellen für unser Programm zu implementieren.
Stellenweise gibt es hier DLL's von 1999, warum neu kompilieren,
looft ja alles.

Aber jede DLL ist eigenständig !
Gemeinsam benutzer Code wird in die DLL's doppelt reinkompiliert.
So wird die DLL-Hölle vermieden.

Zusätzliche Platz <-> meine Nerven ?

Der Platz hat gewonnen ;)


Willst du das wirklich so machen,
empfehle ich, beim Cheffe (MS$) zu guggen.

Definiere einen (packed) record,
ersten Feld ist Size: Integer.
Packe in diesen Record alle gemeinsamen Variablen
und übergebe ihn an an jede DLL-Methode als Zeiger,
die eine globale Variable benutzen soll.

Bei neuen Feldern des Records wird das Size entsprechend erhöht (SizeOf(rec)).
Neue DLL-Methoden erkennen durch das Size, welche Variablen der Record besitzt.

Aber ich persönlich rate davon nur ab.


Heiko


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