Freigeben über


Informationen zum dynamischen Datenaustausch

Windows bietet mehrere Methoden zum Übertragen von Daten zwischen Anwendungen. Eine Methode besteht darin, das DDE-Protokoll (Dynamic Data Exchange) zu verwenden. Das DDE-Protokoll ist eine Reihe von Nachrichten und Richtlinien. Es sendet Nachrichten zwischen Anwendungen, die Daten gemeinsam nutzen und gemeinsam genutzten Speicher zum Austauschen von Daten zwischen Anwendungen verwenden. Anwendungen können das DDE-Protokoll für einmalige Datenübertragungen und für kontinuierlichen Austausch verwenden, in dem Anwendungen Updates aneinander senden, sobald neue Daten verfügbar werden.

Windows unterstützt auch die Dynamic Data Exchange Management Library (DDEML). Die DDEML ist eine Dynamic Link Library (DLL), die Anwendungen zum Freigeben von Daten verwenden können. Die DDEML stellt Funktionen und Meldungen bereit, 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 zum Verwalten von DDE-Unterhaltungen. (Eine DDE-Kommunikation ist die Interaktion zwischen Client- und Serveranwendungen.)

Die DDEML bietet außerdem eine Möglichkeit zum Verwalten der Zeichenfolgen und Daten, die DDE-Anwendungen gemeinsam nutzen. Anstatt Atome und Zeiger auf freigegebene Speicherobjekte zu verwenden, erstellen DDE-Anwendungen Zeichenfolgen-Handles, die Zeichenfolgen identifizieren, und Daten-Handles, die Speicherobjekte identifizieren, und tauschen diese aus. Die DDEML ermöglicht es auch, dass eine Serveranwendung die unterstützten Dienstnamen registriert. 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 die DDEML die Kompatibilität zwischen DDE-Anwendungen sicher, indem sie gezwungen werden, das DDE-Protokoll einheitlich zu implementieren.

Vorhandene Anwendungen, die das nachrichtenbasierte DDE-Protokoll verwenden, sind vollständig kompatibel mit denen, die die DDEML verwenden. Das heißt, eine Anwendung, die nachrichtenbasierte DDE verwendet, kann Unterhaltungen einrichten und Transaktionen mit Anwendungen durchführen, die die DDEML verwenden. Aufgrund der vielen Vorteile der DDEML sollten neue Anwendungen sie anstelle der DDE-Nachrichten verwenden. Um die API-Elemente der DDEML zu verwenden, müssen Sie die DDEML-Headerdatei in Die Quelldateien einfügen, eine Verknüpfung mit der DDEML-Bibliothek herstellen und sicherstellen, dass sich die DDEML-Dynamic Link Library im Suchpfad des Systems befindet.

Dynamisches Datenaustauschprotokoll

Da Windows über eine nachrichtenbasierte Architektur verfügt, ist das Übergeben 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 Datenelemente verweisen, wenn mehr als ein paar Wörter von Informationen zwischen Anwendungen übergeben werden. Das DDE-Protokoll definiert genau, wie Anwendungen die Parameter wParam und lParam verwenden sollen, um größere Datenelemente mithilfe von globalen Atomen und gemeinsam genutzten Speicherhandles zu übergeben. Das DDE-Protokoll verfügt über spezifische Regeln zum Zuordnen und Löschen von globalen Atomen und freigegebenen Speicherobjekten.

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 Atoms".

Verwendung für Windows Dynamic Data Exchange

DDE eignet sich am besten für den Datenaustausch, der keine fortlaufende Benutzerinteraktion erfordert. In der Regel stellt eine Anwendung eine Methode bereit, mit der der Benutzer die Verbindung zwischen den Anwendungen herstellen kann, die Daten austauschen. Sobald diese Verknüpfung hergestellt wurde, tauschen die Anwendungen jedoch Daten ohne weitere Beteiligung des Benutzers aus.

DDE kann verwendet werden, um eine breite Palette von Anwendungsfeatures zu implementieren, z. B.:

  • Verknüpfen mit Echtzeitdaten, z. B. mit Börsenaktualisierungen, wissenschaftlichen Instrumenten oder Prozesskontrolle.
  • Erstellen zusammengesetzter Dokumente, z. B. eines Textverarbeitungsdokuments, das ein diagramm enthält, das von einer Grafikanwendung erstellt wird. Bei Verwendung von DDE ändert sich das Diagramm, wenn die Quelldaten geändert werden, während der Rest des Dokuments unverändert bleibt.
  • Durchführen von Datenabfragen zwischen Anwendungen, z. B. einer Kalkulationstabelle, die eine Datenbank für überfällige Konten abfragt.

Dynamischer Datenaustausch aus Sicht des Benutzers

Das folgende Beispiel veranschaulicht, wie zwei DDE-Anwendungen zusammenarbeiten können, wie aus sicht des Benutzers.

Ein Tabellenkalkulationsbenutzer möchte Microsoft Excel verwenden, um den Kurs einer bestimmten Aktie an der New York Stock Exchange nachzuverfolgen. Der Benutzer hat eine Anwendung namens Quote, die wiederum Zugriff auf NYSE-Daten hat. Die DDE-Kommunikation zwischen Excel und Quote findet wie folgt statt:

  • Der Benutzer initiiert die Unterhaltung, indem er den Namen der Anwendung (Quote) angibt, die die Daten und das jeweilige Thema von Interesse (NYSE) liefert. Die resultierende DDE-Kommunikation wird verwendet, um Kurse für bestimmte Aktien anzufordern.
  • Excel sendet die Anwendungs- und Themennamen an alle DDE-Anwendungen, die derzeit im System ausgeführt werden. Zitat antwortet und beginnt eine Unterhaltung mit Excel über die NYSE.
  • Der Benutzer kann dann eine Tabellenkalkulationsformel in einer Zelle erstellen, die anfordert, dass die Kalkulationstabelle automatisch aktualisiert wird, wenn sich ein bestimmter Aktienkurs ändert. Beispielsweise könnte der Benutzer eine automatische Aktualisierung anfordern, wenn eine Änderung am Verkaufspreis der ZAXX-Aktie erfolgt, indem er die folgende Excel-Formel angibt: ='Quote'|' NYSE'! ZAXX
  • Der Benutzer kann die automatische Aktualisierung der ZAXX-Aktienkurse jederzeit beenden. Andere Datenlinks, die separat (z. B. für Angebote für andere Aktien) eingerichtet wurden, bleiben weiterhin unter derselben NYSE-Kommunikation aktiv.
  • Der Benutzer kann auch die gesamte Unterhaltung zwischen Excel und Quote im NYSE-Thema beenden, sodass keine spezifischen Datenlinks zu diesem Thema erstellt werden können, ohne eine neue Unterhaltung zu initiieren.

Konzepte für dynamischen Datenaustausch

In den folgenden Abschnitten werden die wichtigen Konzepte und Terminologie erläutert, die für das Verständnis des dynamischen Datenaustauschs von entscheidender Bedeutung sind.

Client, Server und Kommunikation

Zwei an DDE teilnehmende Anwendungen sollen sich an einer DDE-Unterhaltung beteiligen. Die Anwendung, die die Unterhaltung initiiert, ist die DDE-Clientanwendung; die Anwendung, die auf den Client antwortet, ist die DDE-Serveranwendung. Eine Anwendung kann gleichzeitig an mehreren Unterhaltungen teilnehmen, die als Client in einigen und als Server in anderen fungiert.

Eine DDE-Unterhaltung findet zwischen zwei Fenstern statt, jeweils eines für jede der teilnehmenden 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-Unterhaltung durch das Ziehpunktepaar für die Fenster identifiziert wird, die an der Unterhaltung beteiligt sind, sollte kein Fenster an mehreren Unterhaltungen mit einem anderen Fenster beteiligt sein. Entweder die Clientanwendung oder die Serveranwendung muss für jedes Gespräch 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 Unterhaltung gleichzeitig beteiligt ist, indem es für jede Unterhaltung ein ausgeblendetes Fenster erstellt. Der einzige Zweck dieses Fensters besteht darin, DDE-Nachrichten zu verarbeiten.

Anwendungs-, Themen- und Elementnamen

Das DDE-Protokoll identifiziert die Dateneinheiten, die zwischen Client und Server übergeben werden, mit einer dreistufigen Hierarchie von Anwendungs-, Themen- und Elementnamen.

Jede DDE-Unterhaltung wird eindeutig durch den Anwendungsnamen und das Thema definiert. Am Anfang einer DDE-Unterhaltung bestimmen der Client und der Server den Anwendungsnamen und das Thema. Der Anwendungsname ist in der Regel der Name der Serveranwendung. Wenn Excel beispielsweise als Server in einer Unterhaltung fungiert, lautet der Anwendungsname Excel.

Das DDE-Thema ist eine allgemeine Klassifizierung von Daten, in denen mehrere Datenelemente während der Unterhaltung "diskutiert" (ausgetauscht) werden können. Bei Anwendungen, die auf dateibasierten Dokumenten arbeiten, ist das Thema in der Regel ein Dateiname. Bei anderen Anwendungen ist das Thema ein anwendungsspezifischer Name.

Da das Client- und Serverfenster eine DDE-Unterhaltung zusammen identifizieren, können der Anwendungsname und das Thema, das eine Unterhaltung definiert, während der Unterhaltung nicht geändert werden.

Ein DDE-Datenelement sind Informationen, die mit dem Gesprächsthema zusammenhängen und zwischen den Anwendungen ausgetauscht werden. Werte für das Datenelement können vom Server an den Client oder vom Client an den Server übergeben werden. Daten können mit jedem der Standard-Zwischenablageformate oder mit einem registrierten Zwischenablageformat übergeben werden. Ein spezielles, registriertes Format namens "Link" identifiziert ein Element in einer DDE-Unterhaltung. Weitere Informationen zu Zwischenablageformaten finden Sie unter "Zwischenablage".

Das Thema "System"

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. Werte einzelner Elemente eines Systemthemas müssen durch Tabstoppzeichen getrennt werden. In der folgenden Tabelle werden einige Elemente für das Systemthema vorgeschlagen.

Gegenstand BESCHREIBUNG
Formate Tabulatorgetrennte Liste der Zwischenablageformate, die die Anwendung rendern kann. In der Regel werden CF_-Formate ohne den "CF_"-Teil ihrer Namen aufgelistet (z. B. wird CF_TEXT als "TEXT" aufgeführt).
Hilfe Text, der kurz erläutert, wie der DDE-Server verwendet wird.
ReturnMessage Unterstützende Details für die zuletzt verwendete WM_DDE_ACK Nachricht. Dieses Element ist nützlich, wenn mehr als acht Bit anwendungsspezifische Rückgabedaten erforderlich sind.
Der Status Angabe des aktuellen Status der Anwendung. Wenn ein Server eine WM_DDE_REQUEST-Nachricht für dieses System-Thema-Element empfängt, sollte er antworten, indem er eine WM_DDE_DATA-Nachricht mit einer Zeichenfolge, die entweder "Busy" oder "Ready" enthält, bereitstellt.
SysItems Liste der systembezogenen Elemente, die von der Anwendung unterstützt werden.
TopicItemList Ähnlich wie das SysItems-Element, mit der Ausnahme, dass TopicItemList für jedes andere Thema 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 aufgezählt werden können, sollte dieses Element nur "TopicItemList" enthalten.
Themen Liste der Themen, die die Anwendung zur aktuellen Zeit unterstützt; diese Liste kann von Moment zu Moment variieren.

Sobald eine DDE-Unterhaltung begonnen hat, kann der Client eine oder mehrere dauerhafte Datenverbindungen mit dem Server herstellen. Eine Datenverbindung ist ein Kommunikationsmechanismus, mit dem der Server den Client benachrichtigt, wenn sich der Wert eines angegebenen Datenelements ändert. Die Datenverbindung ist permanent, was bedeutet, dass dieser Benachrichtigungsprozess fortgesetzt wird, bis die Datenverbindung oder die DDE-Kommunikation selbst beendet wird.

Es gibt zwei Arten dauerhafter DDE-Datenverbindungen: warm und heiß. Bei einer Warmdatenverbindung benachrichtigt der Server den Client darüber, dass sich der Wert des Datenelements geändert hat, aber der Server sendet den Datenwert erst an den Client, wenn der Client ihn anfordert. Bei einer Hot Data-Verknüpfung sendet der Server sofort den geänderten Datenwert an den Client.

Anwendungen, die warme oder heiße Datenlinks unterstützen, bieten in der Regel im Menü "Bearbeiten" einen Befehl "Kopieren" oder "Verknüpfung einfügen", damit der Benutzer Verknüpfungen zwischen Anwendungen herstellen kann.

Atome und geteilte Speicherobjekte

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 allen Fällen muss der Absender der Nachricht ein Atom- oder freigegebenes Speicherobjekt löschen, das der beabsichtigte Empfänger aufgrund einer Fehlerbedingung nicht empfängt, z. B. bei Fehlern der PostMessage Funktion.

DDE verwendet gemeinsam genutzte Speicherobjekte für drei Zwecke:

  • Um einen Datenwert zum Austausch zu transportieren. Dies ist ein Element, auf das vom hData-Parameter in den WM_DDE_DATA und WM_DDE_POKE Nachrichten verwiesen wird.
  • So führen Sie Optionen in einer Nachricht aus. Dies ist ein Element, auf das der hOptions-Parameter in einer WM_DDE_ADVISE Nachricht verweist.
  • Um eine Befehlsausführungsfolge zu tragen. Dies ist ein Element, auf das vom hCommands-Parameter in der WM_DDE_EXECUTE Nachricht und der entsprechenden WM_DDE_ACK Nachricht verwiesen wird.

Eine Anwendung, die ein freigegebenes DDE-Speicherobjekt empfängt, muss es schreibgeschützt behandeln. Die Anwendung darf das Objekt nicht als wechselseitiger Lese-/Schreibbereich für den freien Datenaustausch verwenden.

Wie bei einem DDE-Atom sollte eine Anwendung ein freigegebenes Speicherobjekt freigeben, um den Speicher effektiv zu verwalten. Die Anwendung sollte auch Speicherobjekte sperren und entsperren.

Übersicht über dynamische Datenaustausch-Nachrichten

Da DDE ein nachrichtenbasiertes Protokoll ist, werden keine Funktionen oder Bibliotheken verwendet. Alle DDE-Transaktionen werden durchgeführt, indem bestimmte definierte DDE-Nachrichten zwischen 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 auch in dieser Headerdatei definiert.

In der folgenden Tabelle sind die DDE-Nachrichten zusammengefasst:

Nachricht BESCHREIBUNG
WM_DDE_ACK Bestätigt, ob eine Nachricht empfangen worden ist oder nicht.
WM_DDE_ADVISE Fordert die Serveranwendung an, bei jeder Änderung ein Update oder eine Benachrichtigung für ein Datenelement zu senden. Dadurch wird eine dauerhafte Datenverbindung hergestellt.
WM_DDE_DATA Sendet einen Datenelementwert an die Clientanwendung.
WM_DDE_EXECUTE Sendet eine Zeichenfolge an die Serveranwendung, die die Zeichenfolge als Reihe von Befehlen verarbeiten soll.
WM_DDE_INITIATE Initiiert eine Unterhaltung zwischen Client- und Serveranwendungen.
WM_DDE_POKE Sendet einen Datenelementwert an die Serveranwendung.
WM_DDE_REQUEST Fordert die Serveranwendung an, den Wert eines Datenelements bereitzustellen.
WM_DDE_TERMINATE Beendet eine Unterhaltung.
WM_DDE_UNADVISE Beendet eine dauerhafte Datenverbindung.

Eine Anwendung ruft SendMessage auf, um die WM_DDE_INITIATE Nachricht oder eine WM_DDE_ACK Nachricht auszugeben, die als Reaktion auf WM_DDE_INITIATE gesendet wurde. Alle anderen Nachrichten werden von PostMessage gesendet. Der erste Parameter dieser Aufrufe ist ein Handle für das empfangende Fenster; der zweite Parameter enthält die zu sendende Nachricht; der dritte Parameter identifiziert das Sendefenster; und der vierte Parameter enthält die nachrichtenspezifischen Argumente.

Nachrichtenfluss für dynamischen Datenaustausch

Eine typische DDE-Unterhaltung besteht aus den folgenden Ereignissen:

  1. Die Clientanwendung initiiert die Unterhaltung, und die Serveranwendung antwortet.
  2. Die Anwendungen tauschen Daten über eine oder alle der folgenden Methoden aus:
    • Die Serveranwendung sendet Daten an den Client auf Anforderung des Clients.
    • Die Clientanwendung sendet unerwünschte 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 einen Befehl auf Anforderung des Clients aus.
  3. Entweder die Client- oder Serveranwendung beendet die Unterhaltung.

Ein Anwendungsfenster, das Anforderungen von einem Client oder Server verarbeitet, muss diese streng in der Reihenfolge verarbeiten, in der sie empfangen werden.

Ein Client kann Unterhaltungen mit mehreren Servern herstellen; ein Server kann Unterhaltungen mit mehr als einem Client führen. Beim Behandeln von Nachrichten aus mehreren Quellen muss ein Client oder Server die Nachrichten einer Unterhaltung synchron verarbeiten, aber nicht alle Nachrichten synchron verarbeiten. Mit anderen Worten: Sie kann bei Bedarf von einer Unterhaltung zu einer anderen wechseln.

Wenn eine Anwendung eine eingehende Anforderung nicht verarbeiten kann, weil sie auf eine DDE-Antwort wartet, muss sie eine Verklemmung verhindern, indem sie eine WM_DDE_ACK-Nachricht sendet, bei der das fBusy-Element der DDEACK-Struktur auf 1 gesetzt ist. Eine Anwendung kann auch eine ausgelastete WM_DDE_ACK Nachricht senden, wenn eine eingehende Anforderung aus irgendeinem Grund nicht innerhalb eines angemessenen Zeitraums verarbeitet werden kann.

Eine Anwendung sollte in der Lage sein, den Ausfall eines Clients oder Servers zu verarbeiten, wenn innerhalb eines bestimmten Zeitraums nicht auf eine Nachricht geantwortet wird. Da das Timeoutintervall je nach Art der Anwendung und konfiguration des Systems des Benutzers (einschließlich der Verbindung mit einem Netzwerk) variieren kann, sollte die Anwendung dem Benutzer die Möglichkeit geben, das Intervall anzugeben.

Parameterpackfunktionen

Der lParam-Parameter vieler DDE-Nachrichten enthält zwei Datenelemente. Beispielsweise enthält der lParam der WM_DDE_DATA-Nachricht ein Daten-Handle und ein Atom. Anwendungen müssen die PackDDElParam-Funktion verwenden, um den Handle und das Atom in einen lParam-Parameter zu packen, und die Funktion "UnpackDDElParam " zum Entfernen der Werte. DDE-Anwendungen müssen PackDDElParam und UnpackDDElParam für alle Nachrichten verwenden, die während einer DDE-Kommunikation gepostet werden.

Anwendungen können auch die Funktionen "ReuseDDElParam " und "FreeDDElParam " verwenden. ReuseDDElParam ermöglicht es einer DDE-Anwendung, einen gepackten lParam-Parameter wiederzuverwenden, wodurch die Anzahl der Speicherumlagerungen reduziert wird, die die Anwendung während einer Unterhaltung ausführen muss. Eine Anwendung kann FreeDDElParam verwenden, um den Speicher freizugeben, der einem Datenhandle zugeordnet ist, das während einer DDE-Unterhaltung empfangen wurde.

Dynamischer Datenaustausch und Identitätswechsel

Damit ein Server die Identität eines Clients annehmen kann, ruft der Client die DdeSetQualityOfService-Funktion auf. Die SECURITY_IMPERSONATION_LEVEL-Struktur wird verwendet, um die Ebene des Identitätswechsels zu steuern, die der Server ausführen kann.

Ein DDE-Server kann einen DDE-Client durch Aufrufen der Funktion ImpersonateDdeClientWindow imitieren. Ein DDEML-Server sollte die DdeImpersonateClient-Funktion verwenden.

Zwischenablage

SendMessage