Informationen dynamische Daten Exchange
Windows stellt mehrere Methoden zum Übertragen von Daten zwischen Anwendungen zur Verfügung. Eine Methode ist die Verwendung des dynamische Daten Exchange -Protokolls (DDE). Das DDE-Protokoll besteht aus einer Reihe von Nachrichten und Richtlinien. Es sendet Nachrichten zwischen Anwendungen, die Daten gemeinsam nutzen, und verwendet freigegebenen Arbeitsspeicher zum Austauschen von Daten zwischen Anwendungen. Anwendungen können das DDE-Protokoll für einmalige Datenübertragungen und für fortlaufenden Austausch verwenden, bei dem Anwendungen Updates aneinander senden, sobald neue Daten verfügbar werden.
Windows unterstützt auch die dynamische Daten Exchange Management Library (DDEML). DDEML ist eine DLL (Dynamic Link Library), mit der Anwendungen Daten freigeben können. DDEML stellt Funktionen und Meldungen zur Verfügung, die das Hinzufügen von DDE-Funktionen zu einer Anwendung vereinfachen. Anstatt DDE-Nachrichten direkt zu senden, zu posten und zu verarbeiten, verwendet eine Anwendung die DDEML-Funktionen, um DDE-Konversationen zu verwalten. (Eine DDE-Konversation ist die Interaktion zwischen Client- und Serveranwendungen.)
DDEML bietet auch eine Möglichkeit zum Verwalten der Zeichenfolgen und Daten, die von DDE-Anwendungen gemeinsam verwendet werden. Anstatt Atome und Zeiger auf Freigegebene Speicherobjekte zu verwenden, erstellen und tauschen DDE-Anwendungen Zeichenfolgenhandles aus, die Zeichenfolgen und Datenhandles identifizieren, die Speicherobjekte identifizieren. Die DDEML ermöglicht es einer Serveranwendung auch, die unterstützten Dienstnamen zu registrieren. Die Namen werden an andere Anwendungen im System übertragen, die die Namen verwenden können, um eine Verbindung mit dem Server herzustellen. Darüber hinaus stellt DDEML die Kompatibilität zwischen DDE-Anwendungen sicher, indem er sie zwingt, das DDE-Protokoll konsistent zu implementieren.
Vorhandene Anwendungen, die das nachrichtenbasierte DDE-Protokoll verwenden, sind vollständig mit denen kompatibel, die DDEML verwenden. Das heißt, eine Anwendung, die nachrichtenbasierte DDE verwendet, kann Konversationen herstellen und Transaktionen mit Anwendungen ausführen, die die DDEML verwenden. Aufgrund der vielen Vorteile der DDEML sollten neue Anwendungen diese anstelle der DDE-Nachrichten verwenden. Um die API-Elemente der DDEML verwenden zu können, müssen Sie die DDEML-Headerdatei in Ihre Quelldateien, eine Verknüpfung mit der DDEML-Bibliothek und sicherstellen, dass sich die DDEML-Dynamic Link-Bibliothek im Suchpfad des Systems befindet.
Die folgenden Themen werden in diesem Abschnitt erläutert.
- dynamische Daten Exchange Protokoll
- Verwendungsmöglichkeiten für Windows dynamische Daten Exchange
- dynamische Daten Exchange aus Sicht des Benutzers
- dynamische Daten Exchange Konzepte
- dynamische Daten Exchange Nachrichten – Übersicht
- dynamische Daten Exchange Message Flow
- Funktionen zum Packen von Parametern
- dynamische Daten Exchange und Identitätswechsel
dynamische Daten Exchange Protokoll
Da Windows über eine nachrichtenbasierte Architektur verfügt, ist die Übergabe von Nachrichten die am besten geeignete Methode zum automatischen Übertragen von Informationen zwischen Anwendungen. Nachrichten enthalten jedoch nur zwei Parameter (wParam und lParam) zum Übergeben von Daten. Daher müssen diese Parameter indirekt auf andere Daten verweisen, wenn mehr als ein paar Wörter an Informationen zwischen Anwendungen übergeben werden. Das DDE-Protokoll definiert genau, wie Anwendungen die Parameter wParam und lParam verwenden sollten, um größere Datenteile mithilfe von globalen Atomen und Shared Memory-Handles zu übergeben. Das DDE-Protokoll verfügt über spezifische Regeln zum Zuordnen und Löschen von globalen Atomen und Shared Memory-Objekten.
Ein globales Atom ist ein Verweis auf eine Zeichenfolge. Im DDE-Protokoll identifizieren Atome die Anwendungen, die Daten austauschen, die Art der ausgetauschten Daten und die Datenelemente selbst. Weitere Informationen zu Atomen finden Sie unter Informationen zu Atomen.
Verwendungsmöglichkeiten für Windows dynamische Daten Exchange
DDE ist am besten für Datenaustausche geeignet, die keine fortlaufende Benutzerinteraktion erfordern. In der Regel stellt eine Anwendung eine Methode für den Benutzer zur Verfügung, um die Verknüpfung zwischen den Anwendungen zu erstellen, die Daten austauschen. Nachdem dieser Link hergestellt wurde, tauschen die Anwendungen jedoch Daten ohne weitere Benutzerein beteiligung aus.
DDE kann verwendet werden, um eine Vielzahl von Anwendungsfeatures zu implementieren, z. B.:
- Verknüpfung mit Echtzeitdaten, z. B. mit Aktienkursaktualisierungen, wissenschaftlichen Instrumenten oder Prozesssteuerung.
- Erstellen zusammengesetzter Dokumente, z. B. eines Textverarbeitungsdokuments, das ein von einer Grafikanwendung erzeugtes Diagramm enthält. Bei Verwendung von DDE ändert sich das Diagramm, wenn die Quelldaten geändert werden, während der Rest des Dokuments unverändert bleibt.
- Ausführen von Datenabfragen zwischen Anwendungen, z. B. eine Tabelle, die eine Datenbank nach Konten abfragt, die überfälligkeiten.
dynamische Daten Exchange aus Sicht des Benutzers
Im folgenden Beispiel wird veranschaulicht, wie zwei DDE-Anwendungen zusammenarbeiten können, wie aus Sicht des Benutzers zu sehen.
Ein Tabellenkalkulationsbenutzer möchte Microsoft Excel verwenden, um den Preis einer bestimmten Aktien im New York Stock Exchange. Der Benutzer verfügt über eine Anwendung namens Quote, die wiederum Zugriff auf NYSE-Daten hat. Die DDE-Konversation zwischen Excel und Anführungszeichen findet wie folgt statt:
- Der Benutzer initiiert die Konversation durch Angeben des Namens der Anwendung (Quote), die die Daten und das bestimmte thema von Interesse (NYSE) liefert. Die resultierende DDE-Konversation wird verwendet, um Kursnotierungen für bestimmte Aktien an fordern.
- Excel sendet die Anwendungs- und Themennamen an alle DDE-Anwendungen, die derzeit im System ausgeführt werden. Quote antwortet, und es wird eine Konversation mit Excel zum NYSE-Thema.
- Der Benutzer kann dann eine Tabellenkalkulationsformel in einer Zelle erstellen, die an fordert, dass das Arbeitsblatt automatisch aktualisiert wird, wenn sich ein bestimmtes Angebot ändert. Der Benutzer könnte z. B. ein automatisches Update anfordern, wenn eine Änderung am Verkaufspreis der ZAXX-Aktien auftritt, indem er die folgende Excel Formel anknappt: ='Quote' | 'NYSE'! ZAXX
- Der Benutzer kann die automatische Aktualisierung der ZAXX-Aktiennotierung jederzeit beenden. Andere Datenlinks, die separat eingerichtet wurden (z. B. für Notierungen für andere Aktien), bleiben weiterhin in derselben NYSE-Konversation aktiv.
- Der Benutzer kann auch die gesamte Konversation zwischen Excel und Quote im NYSE-Thema beenden, sodass keine spezifischen Datenlinks zu diesem Thema eingerichtet werden können, ohne eine neue Konversation zu initiieren.
dynamische Daten Exchange Konzepte
In den folgenden Abschnitten werden die wichtigen Konzepte und die Terminologie erläutert, die für das Verständnis des dynamischen Datenaustauschs entscheidend sind.
- Client, Server und Konversation
- Anwendungs-, Themen- und Elementnamen
- Das Systemthema
- Permanente Datenlinks
- Atoms and Shared Memory Objects
Client, Server und Konversation
Zwei Anwendungen, die an DDE teilnehmen, werden als an einer DDE-Konversation beteiligt bezeichnet. Die Anwendung, die die Konversation initiiert, ist die DDE-Clientanwendung. Die Anwendung, die auf den Client antwortet, ist die DDE-Serveranwendung. Eine Anwendung kann mehrere Konversationen gleichzeitig führen und in einigen als Client und in anderen als Server agieren.
Eine DDE-Konversation findet zwischen zwei Fenstern statt, eines für jede der beteiligten Anwendungen. Ein Fenster kann das Hauptfenster der Anwendung sein. ein Fenster, das einem bestimmten Dokument zugeordnet ist, wie in einer MDI-Anwendung (Multiple Document Interface). oder ein ausgeblendetes (unsichtbares) Fenster, dessen einziger Zweck die Verarbeitung von DDE-Nachrichten ist.
Da eine DDE-Konversation durch das Paar von Handles zu den Fenstern identifiziert wird, die an der Konversation teilnehmen, sollte kein Fenster in mehr als einer Konversation mit einem anderen Fenster aktiv sein. Entweder die Clientanwendung oder die Serveranwendung muss für jede Konversation mit einem bestimmten Server oder einer bestimmten Clientanwendung ein anderes Fenster bereitstellen.
Eine Anwendung kann sicherstellen, dass ein Paar von Client- und Serverfenstern nie an mehr als einer Konversation beteiligt ist, indem für jede Konversation ein ausgeblendetes Fenster erstellt wird. Der einzige Zweck dieses Fensters ist die Verarbeitung von DDE-Nachrichten.
Anwendungs-, Themen- und Elementnamen
Das DDE-Protokoll identifiziert die Dateneinheiten, die zwischen Client und Server mit einer Hierarchie von Anwendungs-, Themen- und Elementnamen auf drei Ebenen übergeben werden.
Jede DDE-Konversation wird durch den Anwendungsnamen und das Thema eindeutig definiert. Am Anfang einer DDE-Konversation bestimmen Client und Server den Anwendungsnamen und das Thema. Der Anwendungsname ist normalerweise der Name der Serveranwendung. Wenn beispielsweise Excel als Server in einer Konversation fungiert, wird der Anwendungsname Excel.
Das DDE-Thema ist eine allgemeine Klassifizierung von Daten, in der mehrere Datenelemente während der Konversation "besprochen" (ausgetauscht) werden können. Bei Anwendungen, die dateibasierte Dokumente verwenden, ist das Thema in der Regel ein Dateiname. Bei anderen Anwendungen ist das Thema ein anwendungsspezifischer Name.
Da das Client- und Serverfenster gemeinsam eine DDE-Konversation identifizieren, können der Anwendungsname und das Thema, die eine Konversation definieren, während der Konversation nicht geändert werden.
Ein DDE-Datenelement sind Informationen im Zusammenhang mit dem Konversationsthema, das zwischen den Anwendungen ausgetauscht wird. Werte für das Datenelement können vom Server an den Client oder vom Client an den Server übergeben werden. Daten können mit einem beliebigen Standardformat der Zwischenablage oder mit einem registrierten Zwischenablageformat übergeben werden. Ein spezielles, registriertes Format namens Link identifiziert ein Element in einer DDE-Konversation. Weitere Informationen zu Zwischenablageformaten finden Sie unter Zwischenablage.
Das Systemthema
Anwendungen sollten das Systemthema jederzeit unterstützen. Dieses Thema enthält einen Kontext für Informationen, die für eine andere Anwendung von allgemeinem Interesse sein können.
Datenelementwerte müssen im CF _ TEXT-Zwischenablageformat gerendert werden. Einzelne Elemente von Elementwerten für ein Systemthema müssen durch Tabstoppzeichen getrennt werden. In der folgenden Tabelle werden einige Elemente für das Systemthema vorgeschlagen.
| Element | BESCHREIBUNG |
|---|---|
| Formate | Durch Tabstopps getrennte Liste der Zwischenablageformate, die die Anwendung rendern kann. In der Regel _ werden CF-Formate mit dem "CF"-Teil _ der entfernten Namen aufgeführt (z. B. wird CF _ TEXT als " TEXT ")aufgeführt. |
| Hilfe | Text, in dem kurz erläutert wird, wie der DDE-Server verwendet wird. |
| Returnmessage | Unterstützende Details für die zuletzt verwendete WM _ DDE _ ACK-Meldung. Dieses Element ist nützlich, wenn mehr als acht Bits anwendungsspezifischer Rückgabedaten erforderlich sind. |
| Status | Angabe des aktuellen Status der Anwendung. Wenn ein Server eine WM _ DDE _ REQUEST-Nachricht für dieses Systemthemaelement empfängt, sollte er entsprechend eine WM _ DDE _ DATA-Nachricht mit einer Zeichenfolge veröffentlichen, die entweder Ausgelastet oder Bereit enthält. |
| SysItems | Liste der Systemthemaelemente, die von der Anwendung unterstützt werden. |
| TopicItemList | Ähnlich wie beim SysItems-Element, mit der Ausnahme, dass TopicItemList für jedes Andere als das Systemthema unterstützt werden sollte. Dies ermöglicht das Durchsuchen der elemente, die unter jedem Thema unterstützt werden. Wenn die Elemente nicht aufzählt werden können, sollte dieses Element nur "TopicItemList" enthalten. |
| Themen | Liste der Themen, die die Anwendung zum aktuellen Zeitpunkt unterstützt. Diese Liste kann von Moment zu Moment variieren. |
Permanente Datenlinks
Sobald eine DDE-Konversation begonnen hat, kann der Client eine oder mehrere permanente Datenverbindungen mit dem Server herstellen. Ein Datenlink ist ein Kommunikationsmechanismus, mit dem der Server den Client benachrichtigt, wenn sich der Wert eines angegebenen Datenelements ändert. Der Datenlink ist in dem Sinne permanent, dass dieser Benachrichtigungsprozess fortgesetzt wird, bis der Datenlink oder die DDE-Konversation selbst beendet wird.
Es gibt zwei Arten von permanenten DDE-Datenlinks: warm und hot. In einem warmen Datenlink benachrichtigt der Server den Client darüber, dass sich der Wert des Datenelements geändert hat, aber der Server sendet den Datenwert erst dann an den Client, wenn er vom Client an ihn gesendet wird. In einem hot-Datenlink sendet der Server den geänderten Datenwert sofort an den Client.
Anwendungen, die warme oder heiße Datenlinks unterstützen, stellen in der Regel im Menü Bearbeiten den Befehl Copy or Paste Link (Link kopieren oder einfügen) zur Verfügung, damit der Benutzer Links zwischen Anwendungen herstellen kann.
Atoms and Shared Memory Objects
Bestimmte Argumente von DDE-Nachrichten sind globale Atome oder Freigegebene Speicherobjekte. Anwendungen, die diese Argumente verwenden, müssen explizite Regeln zum Zuordnen und Löschen befolgen. In jedem Fall muss der Nachrichtensender jedes Atom- oder Shared Memory-Objekt löschen, das der beabsichtigte Empfänger aufgrund eines Fehlerzustands, z. B. eines Fehlers der PostMessage-Funktion, nicht erhält.
DDE verwendet Shared Memory-Objekte für drei Zwecke:
- Zum Tragen eines auszutauschenden Datenelementwerts. Dies ist ein Element, auf das der hData-Parameter in den WM _ DDE _ DATA- und WM _ DDE _ POKE-Nachrichten verweist.
- Um Optionen in einer Nachricht zu tragen. Dies ist ein Element, auf das der hOptions-Parameter in einer WM _ DDE _ ADVISE-Meldung verweist.
- Zum Tragen einer Befehlsausführungszeichenfolge. Dies ist ein Element, auf das der hCommands-Parameter in der WM _ DDE _ EXECUTE-Nachricht und die entsprechende WM _ DDE _ ACK-Meldung verweist.
Eine Anwendung, die ein freigegebenes DDE-Speicherobjekt empfängt, muss es als schreibgeschützt behandeln. Die Anwendung darf das -Objekt nicht als gegenseitigen Lese-/Schreibbereich für den freien Datenaustausch verwenden.
Wie bei einem DDE-Atom sollte eine Anwendung ein Shared Memory-Objekt zur effektiven Verwaltung des Arbeitsspeichers frei geben. Die Anwendung sollte auch Speicherobjekte sperren und entsperren.
dynamische Daten Exchange Nachrichten – Übersicht
Da DDE ein nachrichtenbasiertes Protokoll ist, werden keine Funktionen oder Bibliotheken verwendet. Alle DDE-Transaktionen werden durchgeführt, indem bestimmte definierte DDE-Nachrichten zwischen den Client- und Serverfenstern übergeben werden.
Es gibt neun DDE-Nachrichten. Die symbolischen Konstanten für diese Nachrichten werden in der DDE-Headerdatei definiert. Bestimmte Strukturen für die verschiedenen DDE-Nachrichten werden ebenfalls in dieser Headerdatei definiert.
In der folgenden Tabelle sind die DDE-Meldungen zusammengefasst.
Message |
BESCHREIBUNG |
|---|---|
| WM _ DDE _ ACK | Bestätigt das Empfangen oder Nicht-Empfangen einer Nachricht. |
| WM _ DDE _ ADVISE | Fordert die Serveranwendung auf, bei jeder Änderung ein Update oder eine Benachrichtigung für ein Datenelement vorzunehmen. Dadurch wird eine permanente Datenverknüpfung erstellt. |
| WM _ DDE _ DATA | Sendet einen Datenelementwert an die Clientanwendung. |
| WM _ DDE _ EXECUTE | Sendet eine Zeichenfolge an die Serveranwendung, die die Zeichenfolge als eine Reihe von Befehlen verarbeiten soll. |
| WM _ DDE _ INITIATE | Initiiert eine Konversation zwischen Client- und Serveranwendungen. |
| WM _ DDE _ POKE | Sendet einen Datenelementwert an die Serveranwendung. |
| WM _ _ DDE-ANFORDERUNG | Fordert die Serveranwendung zur Bereitstellung des Werts eines Datenelements an. |
| WM _ DDE _ TERMINATE | Beendet eine Konversation. |
| WM _ DDE _ UNADVISE | Beendet einen permanenten Datenlink. |
Eine Anwendung ruft SendMessage auf, um die WM _ DDE _ INITIATE-Nachricht oder eine WM _ DDE _ ACK-Nachricht ausausgabe, die als Antwort auf WM _ DDE INITIATE gesendet _ wird. Alle anderen Nachrichten werden von PostMessage gesendet. Der erste Parameter dieser Aufrufe ist ein Handle für das Empfangsfenster. Der zweite Parameter enthält die zu sendende Nachricht. Der dritte Parameter identifiziert das Sendefenster. und der vierte Parameter enthält die nachrichtenspezifischen Argumente.
dynamische Daten Exchange Message Flow
Eine typische DDE-Konversation besteht aus den folgenden Ereignissen:
Die Clientanwendung initiiert die Konversation, und die Serveranwendung antwortet.
Die Anwendungen tauschen Daten mit einer oder allen der folgenden Methoden aus:
-
- Die Serveranwendung sendet Daten auf Anforderung des Clients an den Client.
- Die Clientanwendung sendet nicht angeforderte Daten an die Serveranwendung.
- Die Clientanwendung fordert die Serveranwendung auf, den Client zu benachrichtigen, wenn sich ein Datenelement ändert (warmer Datenlink).
- Die Clientanwendung fordert die Serveranwendung auf, daten zu senden, wenn sich die Daten ändern (Hot Data Link).
- Die Serveranwendung führt auf Anforderung des Clients einen Befehl aus.
-
Entweder die Client- oder Serveranwendung beendet die Konversation.
Ein Anwendungsfenster, das Anforderungen von einem Client oder Server verarbeitet, muss sie streng in der Reihenfolge verarbeiten, in der sie empfangen werden.
Ein Client kann Konversationen mit mehr als einem Server herstellen. Ein Server kann Konversationen mit mehr als einem Client führen. Bei der Verarbeitung von Nachrichten aus mehr als einer Quelle muss ein Client oder Server die Nachrichten einer Konversation synchron verarbeiten, aber nicht alle Nachrichten synchron verarbeiten. Anders ausgedrückt: Sie kann bei Bedarf von einer Konversation in eine andere verschoben werden.
Wenn eine Anwendung eine eingehende Anforderung nicht verarbeiten kann, weil sie auf eine DDE-Antwort wartet, muss sie Deadlocks verhindern, indem sie eine WM _ DDE _ ACK-Nachricht mit dem fBusy-Member der DDEACK-Struktur auf 1 setzt. Eine Anwendung kann auch eine ausgelastet WM _ DDE _ ACK-Nachricht senden, wenn sie eine eingehende Anforderung aus irgendeinem Grund nicht innerhalb eines angemessenen Zeitraums verarbeiten kann.
Eine Anwendung sollte in der Lage sein, den Fehler eines Clients oder Servers zu behandeln, um innerhalb eines bestimmten Zeitpunkts auf eine Nachricht zu reagieren. Da das Time outintervall je nach Art der Anwendung und der Konfiguration des Systems des Benutzers (einschließlich der Verbindung mit einem Netzwerk) variieren kann, sollte die Anwendung dem Benutzer eine Möglichkeit bieten, das Intervall anzugeben.
Funktionen zum Packen von Parametern
Der lParam-Parameter vieler DDE-Nachrichten enthält zwei Daten. Beispielsweise enthält die lParam-Datei der WM _ DDE _ DATA-Nachricht ein Datenhandl und ein Atom. Anwendungen müssen die PackDDElParam-Funktion verwenden, um das Handle und Atom in einen lParam-Parameter zu packen, und die UnpackDDElParam-Funktion, um die Werte zu entfernen. DDE-Anwendungen müssen PackDDElParam und UnpackDDElParam für alle Nachrichten verwenden, die während einer DDE-Konversation gesendet werden.
Anwendungen können auch die Funktionen ReuseDDElParam und FreeDDElParam verwenden. ReuseDDElParam ermöglicht es einer DDE-Anwendung, einen gepackten lParam-Parameter wiederzuverwenden, um die Anzahl von Speicherzuweisungen zu reduzieren, die die Anwendung während einer Konversation ausführen muss. Eine Anwendung kann FreeDDElParam verwenden, um den Arbeitsspeicher frei zu geben, der einem Datenhandl zugeordnet ist, das während einer DDE-Konversation empfangen wird.
dynamische Daten Exchange und Identitätswechsel
Damit ein Server die Identität eines Clients angenommen hat, ruft der Client die DdeSetQualityOfService-Funktion auf. Die SECURITY _ IMPERSONATION _ LEVEL-Struktur wird verwendet, um die Ebene des Identitätswechsels zu steuern, den der Server ausführen kann.
Ein DDE-Server kann die Identität eines DDE-Clients durch Aufrufen der ImpersonateDdeClientWindow-Funktion übernehmen. Ein DDEML-Server sollte die DdeImpersonateClient-Funktion verwenden.