AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Globale Variablen in mehreren DLLs

Ein Thema von Viktorii · begonnen am 14. Jul 2009 · letzter Beitrag vom 14. Jul 2009
Antwort Antwort
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#1

Globale Variablen in mehreren DLLs

  Alt 14. Jul 2009, 11:27
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Globale Variablen in mehreren DLLs

  Alt 14. Jul 2009, 11:48
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: Globale Variablen in mehreren DLLs

  Alt 14. Jul 2009, 11:56
Zitat:
aus wartungstechnischen Gründen
Welche wären das ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#4

Re: Globale Variablen in mehreren DLLs

  Alt 14. Jul 2009, 12:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Globale Variablen in mehreren DLLs

  Alt 14. Jul 2009, 13:11
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.081 Beiträge
 
Delphi 12 Athens
 
#6

Re: Globale Variablen in mehreren DLLs

  Alt 14. Jul 2009, 13:34
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".
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Globale Variablen in mehreren DLLs

  Alt 14. Jul 2009, 13:58
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
Heiko
  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 04:32 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