3.76 DM_StringReturn
Diese Funktion dient zur sicheren Funktionsrückgabe von lokalen Strings (DM_String-Werten) an den Aufrufer. Bei Verwendung von lokalen Variablen und Strukturen in einer C-Funktion sind diese nach der Rückgabe ungültig. Mit dieser Funktion kann problemlos und sicher ein lokaler String zurückgegeben werden.
Zu diesem Zweck wird, wenn nötig, eine temporäre Kopie angelegt (z.B. der darin liegende String kopiert). Ein Kopieren findet für gemanagte Wertereferenzen nicht statt. Der zurückgegebene DM_String sollte dann mit return
an den Aufrufer weitergegeben werden.
DM_String DML_default DM_EXPORT DM_StringReturn
(
DM_String * pstring,
DM_Options options
)
Parameter
-> DM_String * pstring
Dieser Parameter verweist auf den String welcher zurückgegeben wird. Es kann sich dabei um einen gemanagten String handeln, muss aber nicht.
-> DM_Options options
Hier sind keine Optionen erforderlich, ist mit 0 zu belegen.
Rückgabewert
Zurückgegeben wird ein für die Funktionsrückgabe gültiger String oder NULL im Fehlerfall. Ein Fehler kann z.B. vorliegen wenn die Funktion im falschen runstate
aufgerufen wird, der gemanagte String ungültig ist oder das Kopieren nicht ausgeführt werden konnte.
Für die Rückgabe von output-String-Parametern können die Funktionen DM_StringInit und DM_StringChange verwendet werden.
Beispiel
dialog YourDialog function anyvalue StringOf(integer I); on dialog start { print StringOf(123); print StringOf(-42); exit(); }
... DM_String DML_default DM_ENTRY StringOf(DM_Integer I) { char buf[10]; DM_String data; DM_String negative; if (I>=0) { /* return an unmanaged local string */ sprintf(buf, "%d", (int)I); data = buf; /* wrong: return data; => buf is a local char array! */ return DM_StringReturn(&data, 0); } else { /* return a managed string */ DM_StringInit(&negative, 0); /* can be omitted */ DM_StringChange(&negative, "!!negative", &data, 0); return DM_StringReturn(&negative); /* return &negative; => also possible for managed strings! */ } }
Verfügbarkeit
Siehe auch