.. highlightlang:: us .. index:: Überblick DDE, DDE .. _uberblick-dde: Überblick DDE ============= DDE ist die Abkürzung für Dynamic Data Exchange (Dynamischer Datenaustausch). DDE ist ein Verfahren um Daten zwischen Programmen auszutauschen und Kommandos in anderen Programmme auszuführen, andere Programme also "fern zu steuern". Dabei können mit Hilfe des Netzwerk-DDEs sogar Programme auf anderen Rechnern im Netzwerk gesteuert werden. Beispiele für den Einsatz von DDE sind das Abfragen einer Datenbank oder das Konvertieren von Daten in andere Formate. Bei der Verbindung (Konversation) zweier Programme über DDE unterscheidet man die Client-Seite und die Server-Seite. Der Client ist das Programm, das die Konversation einleitet, das Programm das einen Service leistet ist der Server. UniPlot kann sowohl Server sein als auch Client. Beispielsweise kann ein einfaches Messwerterfassungssystem die Möglichkeiten der Diagrammausgabe von UniPlot verwenden (UniPlot als Server) und UniPlot verwendet dabei gleichzeitig einen anderen Server zur Datenkonvertierung (UniPlot als Client). .. _uniplot-als-client: UniPlot als Client ------------------ Das Programm das eine DDE-Konversation einleitet wird als Client bezeichnet. UniScript stellt dazu die folgenden sechs Funktionen zur Verfügung. .. us.indexlist DDE-ClientDdeInitiateDdeExecuteDdePokeDd,DDE-Client,DdeInitiate,DdeExecute,DdePoke,DdeRequest,DdeAdvise,DdeTerminate,DdeTerminateAll, .. include:: ../ftab/DDE-ClientDdeInitiateDdeExecuteDdePokeDd.ftab .. us.example **Beispiel** Wir wollen UniPlot als Client an einem Beispiel betrachten: :: system("c:/msoffice/excel/excel.exe", SW_HIDE, 1); hConv = DdeInitiate("Excel", "System"); ssFile = GetRootDirectory() + "samples\map-data.xls"; DdeExecute(hConv, "[OPEN(\"" + ssFile + "\")]") hConvTab = DdeInitiate("Excel", "map-data.xls"); ssData = DdeRequest(hConvTab, "z1s1:z16384s255"); DdeExecute(hConv, "[QUIT()]"); DdeTerminateAll(); hedit = EdCreate(); EdSetText(hedit, ssData); Wenn Sie diese Zeilen in einen Editor eingeben, werden folgende Aktionen durchgeführt: * Das Tabellenkalkulationsprogramm Excel wird gestartet. * Excel lädt die Datei :file:`Samples\\map-data.xls` aus dem UniPlot-Verzeichnis. * Excel überträgt den Inhalt der Tabelle in eine UniPlot-Variable. * Der Inhalt der Tabelle wird in einem UniPlot-Editor angezeigt. Es soll nicht näher auf das Skript eingegangen werden, schauen Sie sich die Beschreibungen der verwendeten Funktionen an. .. _uniplot-als-server: UniPlot als Server ------------------ UniPlot kann auch als Server verwendet werden. Dazu stehen die folgenden sechs Funktionen zur Verfügung, die der Anwender von UniScript selbst schreiben muss. .. us.indexlist DDE-ServerDdeCallback_ConnectDdeCallback,DDE-Server,DdeCallback_Connect,DdeCallback_ConnectConfirm,DdeCallback_Execute,DdeCallback_Poke,DdeCallback_Request,DdeCallback_Advise,DdeCallback_Disconnect, .. include:: ../ftab/DDE-ServerDdeCallback_ConnectDdeCallback.ftab .. us.example **Beispiel** Als Beispiel soll ein Basic-Programm in dem Textverarbeitungsprogramm Word geschrieben werden. Das Basic-Programm soll mit Hilfe von UniPlot ein Diagramm erzeugen. Beginnen wir jedoch zunächst mit der UniPlot-Seite (der Server-Seite). Geben Sie das folgende Programm in einem UniPlot-Editor ein und übersetzen Sie das Programm, indem Sie den Menü-Befehl :ref:`uniscriptspeichern/ausfuhren` auswählen. :: def DdeCallback_Poke(hConv, ssItem, ssTopic, ssData) { ss = strtok(ssData, ",") rvData = strtod(ss) plot(1:len(rvData), rvData); return TRUE; } Aus Gründen der Übersichtlichkeit, sind hier keine Fehlerkontrollen durchgeführt worden, d.h. die Argumente der Parameter *hConv*, *ssItem*, *ssTopic* werden einfach ignoriert. Betrachten wir nun die Client-Seite. Wir starten dazu Word und geben das folgende Makro ein (Befehl: **Extras=>Makro=>Makro erstellen**): :: Sub Main chan = DDEInitiate("UniPlotSL", "xydata") DDEPoke chan, "xydata", "1, 5, 3, 4, 8, 12" DDETerminate(chan) End Sub Wenn Sie nun die Basic-Funktion ``Main`` in Word ausführen, wird ein Diagramm in UniPlot erzeugt. .. seealso:: :ref:`funktionen-eingeteilt-in-kategorien` :sub:`id-1535155`