Ausgewählte Artikel zur Programmierung mit Delphi

Werner Voigt

 für 


Nachrichtenaustausch

Autor: Dipl.-Math. Werner Voigt

veröffentlicht in Toolbox 4/2001
Copyright 2003 © Werner Voigt und Toolbox
Bitte beachten Sie auch die Hinweise zur kommerziellen Nutzung

Problem:

Wie kann Programm X von seinem Partnerprogramm Y einen Wert aus dessen ini-Datei erhalten, ohne den Speicherort dieser Datei zu kennen?

Lösung:

Um Informationen zwischen Windows-Programmen auszutauschen, bieten sich entsprechende Botschaften an.

Mein Lösungsvorschlag unterstellt, daß der Quelltext des Programms Y (dessen aktuelle Ini-Datei interessiert) vorliegt.

Dann muß Programm X bei Bedarf nur eine Anfrage an Programm Y senden, auf die mit den jeweiligen Daten geantwortet wird. Dazu beschaffen sich beide Programme bei ihrem Start von Windows mittels RegisterWindowMessage eindeutige Botschaftsidentifikatoren. Das ist erforderlich, um systemweit vor Verwechslungen mit anderen benutzerdefinierten Botschaften sicher zu sein.

FindWindow liefert das Handle auf das Fenster des Programms Y. Damit kann dann via SendMessage bei Y nachgefragt werden (Botschaft MM_GiveInfo). Die Botschaft übergibt dabei in Message.lParam das Handle von Programm X. Mit dieser Absenderangabe kann Y dann seinerseits mit Sendmessage seine eigene Botschaft mit den gewünschten Daten an X abliefern.

Folgende Dinge sind noch zu beachten:

  1. Da erst zur Laufzeit die Werte der Botschaftsidentifikatoren feststehen, kann man die in der Delphi-Hilfe beschriebene Form der Programmierung von Botschaftsbehandlungroutinen nicht benutzen. Es bietet sich stattdessen an, direkt in WndProc die jeweilige Botschaft abzufangen.
  2. Die zeichenweise Übergabe der Daten umgeht Probleme, die mit dem sonst zu organisierenden Speicherzugriff über Prozeßgrenzen hinweg verbundenen sind. Aber hier ist noch leicht eine Verbesserung möglich. Es stehen für die Übergabe immerhin 8 Bytes von TMessage in der Botschaft MM_InfoPack zur Verfügung. Aber vielleicht brauchen Sie ja nur eine Zahl aus der aktiven Ini-Datei und übergeben lieber deren Wert. Dann ist natürlich der Dateiname ein Umweg.

zurückzurück
Copyright © 2003 by  EDVoigt  (Werner Voigt).