MsxRead
Diese Anweisung liest die verschiedenen Bereiche einer Nachricht. Eine Nachricht kann aus folgenden Bereichen bestehen:
-
Damit wird eine neue Nachricht geöffnet. In (var2) muss eine Variable vom Typ
intübergeben werden, in der Anschließend die Nachrichten-ID steht. Anhand der ID kann ein benutzerdefinierter Nachrichtentyp ermittelt werden. Eine bereits geöffnete Nachricht wird durch diese Operation automatisch geschlossen.Sind keine weiteren Nachrichten vorhanden wird dies über den Rückgabewert der Funktion übermittelt. Dabei werden die Fehlerkonstanten des entsprechenden Mediums verwendet. Bei der Verwendung von Sockets wird
_ErrTimeoutzurückgegeben, wenn keine weiteren Daten vorhanden sind und_ErrSckRead, wenn die Verbindung beendet wurde. Falls in einer externen Datei keine weiteren Daten vorhanden sind, ist das Resultat_ErrEndOfData. -
Damit wird ein neues Element geöffnet. In (var2) muss eine Variable vom Typ
intangegeben werden, in der anschließend die Item-ID steht. Anhand der ID kann ein benutzerdefinierter Elementtyp ermittelt werden. Ein bereits geöffnetes Element wird durch diese Operation automatisch geschlossen, eventuell noch nicht gelesene Daten werden dabei übersprungen._MsxItemkann nur verwendet werden, wenn zuvor eine Nachricht geöffnet wurde. Falls kein weiteres Element mehr vorhanden ist, wird eine Item-ID von0zurückgeliefert, wobei das Funktionsresultat_ErrOkist. -
Damit werden Daten aus einem Element gelesen. In (var2) wird eine Variable des erforderlichen Typs übergeben. Optional kann in (int3) eine maximale Datenlänge angegeben werden, die die Anzahl der in die Variable zu übertragenen Bytes beim Datentyp
alphabeschränkt. Alle Daten werden seriell gelesen. Dabei müssen nicht zwingend alle Datenfelder ausgelesen werden._MsxDatawird nur bei einem offenen Element verwendet. -
Damit wird die offene Nachricht geschlossen, eventuell noch nicht gelesene Daten oder Elemente werden übersprungen.
Eine Nachricht kann immer nur eine Nachrichten-ID besitzen. Die Nachrichten-ID 0 ist dabei unzulässig. IDs von Items dürfen sich wiederholen. Auch hier ist die ID 0 nicht zulässig. Der eigentliche Nachrichteninhalt befindet sich in einem oder mehreren Datenfeldern pro Item. Beim Lesen von Nachrichten können einzelne Items übersprungen werden. Es wird dann einfach das nächste Item gelesen.
Üblicherweise erfolgt die Auswertung einer Nachricht in einem switch-Konstrukt. Wobei die verschiedenen Abschnitte einzeln verarbeitet werden.
Beispiel:
tMsx # MsxOpen(_MsxSocket | _MsxRead, aHandle);
if (tMsx > 0)
{
try
{
tMsx->MsxRead(_MsxMessage, tMessageID);
tMsx->MsxRead(_MsxItem, tItemID);
while (tItemID > 0)
{
switch (tItemID)
{
case mMsgHeader :
{
tMsx->MsxRead(_MsxData, tSenderName);
...
}
case mMsgAction :
{
tMsx->MsxRead(_MsxData, tAction);
tMsx->MsxRead(_MsxData, tRecordID);
...
}
}
tMsx->MsxRead(_MsxItem, tItemID);
}
tMsx->MsxRead(_MsxEnd, 0);
}
tMsx->MsxClose();
}
Mögliche Laufzeitfehler:
_ErrHdlInvalid: Der übergebene Deskriptor in (obj) ist ungültig._ErrFldType: Die Variable oder das Feld in (var2) hat nicht den passenden Datentyp._ErrValueInvalid: In (int1) wurde ein falscher Wert übergeben.