AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Variablenwerte zwischen verschiedenen Anwendungen teilen
Thema durchsuchen
Ansicht
Themen-Optionen

Variablenwerte zwischen verschiedenen Anwendungen teilen

Ein Thema von Ralf Kaiser · begonnen am 1. Aug 2009 · letzter Beitrag vom 1. Aug 2009
Antwort Antwort
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#1

Variablenwerte zwischen verschiedenen Anwendungen teilen

  Alt 1. Aug 2009, 17:07
Hallo,

wir habe da ein recht grosses Projekt das aus einer Reihe von Anwendungen, COM-Objekten und normalen DLLs besteht.

Bisher war es für einige Teile des Gesamtsystems nur wichtig zu wissen ob z.B. eine bestimmte Anwendung läuft oder eine bestimmte DLL irgendwo geladen ist. Dazu haben die einzelnen Subsysteme jeweils Mutexe mit definierten Namen angelegt. So konnten andere Teile des Systems nachschauen ob ein bestimmter Mutext schon da ist oder nicht. Das funktioniert soweit ganz gut.

Jetzt wird es in Zukunft aber nötig werden, dass ein Teil der Anwendung vom anderen bestimmte Werte auslesen kann.

Dabei scheiden z.B. Messages wie WM_COPYDATA aus, da nicht alle beteiligten Softwarekomponenten über Nachrichtenfenster verfügen und das auch nicht sollen.

Ich hatte zuerst an simple INI-Dateien gedacht über die Werte auszutauschen sind aber das könnte zu Problemen führen wenn ein Teil gerade die INI-Datei schreibt während ein anderer gerade lesen will. Der Zugriff auf so eine INI-Datei müsste dann irgendwie (Mutex, Semaphore) synchronisiert werden. -> nicht so günstig.

Habt Ihr Vorschläge, was man da zum Datenaustausch am besten nehmen könnte? Es wird sich bei den Daten (erst mal) nur um Integerwerte und einige Strings handeln. Allerdings könnte es für Teile der Anwendung nötig sein sehr oft auf diese Daten zuzugreifen, wenn die Werte irgendwo im Speicher stehen wäre das sicher sinnvoll.

Lösungen an die ich gedacht habe wären:

- Memory Mapped Files
- Mailslots
- Named Pipes

Irgendwelche Denkanstösse? Hab ich noch die eine oder andere Möglichkeit vergessen?

Danke schon mal,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Variablenwerte zwischen verschiedenen Anwendungen teilen

  Alt 1. Aug 2009, 18:29
sonstige Möglichkeiten die mir so einfallen:

* ein TCP/IP basierter Kommunikationsserver / Web Service (HTTP, REST)
* eine kleiner Datenbankserver?
* MSMQ (Microsoft Message Queue) oder ein anderer Message Broker?

Eventuell soll das System später auch Bestandteile integrieren können, die auf anderen Plattformen laufen und in anderen Sprachen geschrieben sind? Standards wie HTTP, REST, JSON (oder XML) sind dann leichter integrierbar. Bei Datenbankservern und Message Brokern wäre wichtig, ob es die entsprechenden Client Bibliotheken gibt.

Viele Grüße,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Variablenwerte zwischen verschiedenen Anwendungen teilen

  Alt 1. Aug 2009, 19:02
Das könnte man auch über COM-Objekte lösen.
Hier erst mal ein Interface.
Delphi-Quellcode:
ISharedData = interface(IDispatch)
  ['{EFFF2A9E-093F-45DA-B5D1-2764026B65DD}']
  function Get_Value(const Name: WideString): OleVariant; safecall;
  procedure Set_Value(const Name: WideString; Value: OleVariant); safecall;
  property Value[const Name: WideString]: OleVariant read Get_Value write Set_Value;
end;
Jede Anwendung befragt zuerst einmal die Running Object Table (ROT) nach einem Objekt mit diesem Interface.
Falls es das Objekt in der ROT noch nicht gibt, wird ein neues anlegt (dass sich selbst in der ROT registiert).
Somit haben alle Anwendungen das gleiche Objekt am Wickel.
Natürlich gibt es eine Factoryklasse, damit die Anwendung sich nicht selbst mit der ROT beschäftigen muss.
Die Klasse, die ISharedData implementiert führt intern eine sortierte Liste von Strings und Variants.
Die Verwendung ist dann recht einfach:
Delphi-Quellcode:
var
  sdata : ISharedData;
...
  sdata.Value['Prog1.RunStatus'] := 1;
...
  if sdata.HasValue('irgendwas') then
    ShowMessage('irgendwas = '+sdata.Value['irgendwas']);
Angehängte Dateien
Dateityp: zip shareddata_109.zip (6,1 KB, 6x aufgerufen)
fork me on Github
  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:57 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