Dynamic Data Exchange (DDE) erlaubt anderen Windows-Programmen, ZOC-Befehle ferngesteuert auszuführen. Während REXX-Programme unter der Kontrolle von ZOC laufen müssen, ist es mit DDE möglich, dass völlig separate Anwendungen (z.B. in C++ geschrieben) Befehle an ZOC zur Ausführung schicken.
In dieser Einführung wird davon ausgegangen, dass Kenntnisse über das Grundkonzept von DDE vorhanden sind. Die unten aufgeführten Punkte beschreiben nur Details der Implementierung.
Eine detaillierte Beschreibung zusammen mit einem Beispielprogramm in C kann bei EmTec angefordert werden (ftp://ftp.emtec.com/zoc/).
Session/Topic | |
ZOC verarbeitet nur eine Session gleichzeitig. Der Application-Identifier ist ZOC, und ZOC antwortet auf die Topics COMMUNICATION, COMM und COMM-DEBUG (zweiterer zeigt zur Fehlersuche alle DDE-Events auf dem ZOC-Bildschirm an). ZOC antwortet nicht auf generelle DDE-Requests (also auf Requests ohne Application oder Topic). Zusätzlich zum Namen ZOC reagiert ZOC auch noch auf
ZOCn, wobei n eine Zahl ist, die sich aus der Anzahl der
gleichzeitig gestarteten ZOC-Instanzen herleitet. Die erste heißt
ZOC1, die nächste ZOC2 usw.
| |
Das Senden von Befehlen | |
Befehle können an ZOC entweder per DDE_EXECUTE (Datenfeld) oder DDE_REQUEST
(Itemfeld) gesendet werden. DDE_EXECUTE antwortet mit einem DDE_ACK Paket.
Der numerische Rückgabewert ist im Feld AppRc enthalten. DDE_REQUEST sendet
immer ein DDE_DATA Paket (auch im Fehlerfall), welches das Ergebnis oder den
Text ##ERROR## im Datenfeld enthält. Für das DDE_DATA Paket darf
kein DDE_ACK zurückgeschickt werden. ZOC für Windows erwartet, dass der
Speicherblock, der die Daten enthält, vom Empfänger freigegeben wird.
| |
Serialisierung | |
Befehle müssen streng auf Basis von Command-Reply gesendet werden. ZOC
verarbeitet keine geschachtelten Befehle (z.B. das Senden eines zweiten
Befehls, während noch ein ZocWait abgearbeitet wird).
| |
Befehlsformat | |
DDE_EXECUTE und DDE_REQUEST verwenden das gleiche Befehlsformat. (Beide Befehle unterscheiden sich dadurch, dass EXECUTE nicht verwendet werden kann, um Rückgabewerte von Funktionen zu liefern). Die Befehle müssen mit Null abgeschlossen werden (wie Zeichenketten in C). ZOC kann keine Befehle verarbeiten, die in eckigen Klammern eingeschlossen sind (wie in der Microsoft DDE Spezifikation empfohlen). Außerdem kann nur ein Befehl pro Message verarbeitet werden. Unicode wird nicht unterstützt. Ein Befehl kann entweder in der Form <befehl> <argumente> oder in der Form <befehl>(<argumente>) übergeben werden. Die Argumente können mit Leerzeichen oder Komma getrennt werden. Die empfohlene Form sind allerdings Klammern und Komma. Zeichenketten sollten in Anführungszeichen gesetzt werden, es ist aber auch erlaubt, sie wegzulassen, wenn die Zeichenkette keine Spezialzeichen enthält. Anbei eine Liste gültiger Zeichenketten. Um zu älteren ZOC-Versionen
kompatibel zu sein, ist es erlaubt, den Text 'Zoc' am Anfang jedes Befehls
wegzulassen.
| |
Liste der Befehle | |
Per DDE kann der gleiche Befehls-/Funktionsumfang wie in REXX verwendet
werden. Eine Auflistung aller Befehle ist unter
ZOC-Befehle im Anhang zu finden.
| |
Beispiel | |
Der folgende Ausschnitt ist ein kleines Microsoft Access VBA Programm,
das eine DDE-Verbindung zu ZOC aufbaut, das Modem initialisiert, und
auf "OK" wartet.
|
← Zurück zu Die Programmierung von ZOC (REXX/DDE)