3.83 DM_ValueReturn
Diese Funktion dient zur sicheren Funktionsrückgabe von lokalen DM_Value-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 eine lokale DM_Value-Variable zurückgegeben werden.
Zu diesem Zweck wird, wenn nötig, eine temporäre Kopie des zurückzugebenden Wertes angelegt (z.B. der darin liegende String kopiert). Ein Kopieren findet für gemanagte Wertereferenzen nicht statt. Insofern sollte der zurückgegebene DM_Value-Pointer dann mit return
an den Aufrufer weitergegeben werden.
DM_Value* DML_default DM_EXPORT DM_ValueReturn
(
DM_Value *value,
DM_Options options
)
Parameter
-> DM_Value* value
Dieser Parameter verweist auf die Wertereferenz welche zurückgegeben werden soll. Es kann sich dabei um eine gemanagte Wertereferenz handeln, muss aber nicht.
-> DM_Options options
Hier sind keine Optionen erforderlich, ist mit 0 zu belegen.
Rückgabewert
Zurückgegeben wird ein Zeiger auf eine gültige DM_Value-Struktur 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-Parametern können die Funktionen DM_ValueInit und DM_ValueChange verwendet werden.
Beispiel
dialog YourDialog function anyvalue StringOf(integer I); on dialog start { print StringOf(123); print StringOf(-42); exit(); }
... DM_Value * DML_default DM_ENTRY StringOf(DM_Integer I) { char buf[10]; DM_Value data; DM_Value negative; if (I>=0) { /* return an unmanaged value */ sprintf(buf, "%d", (int)I); data.type = DT_string; data.value.string = buf; /* wrong: return &data => data is a local structure! */ return DM_ValueReturn(&data, 0); } else { /* return a managed value */ DM_ValueInit(&negative, DT_string, NULL, 0); /* can be omitted */ data.type = DT_string; data.value.string = "!!negative!!"; DM_ValueChange(&negative, NULL, &data, 0); /* return &negative; => possible but generates compiler warning! */ return DM_ValueReturn(&negative); } }
Verfügbarkeit
Siehe auch
Method