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.

Zu beachten

Für die Rückgabe von output-String-Parametern können die Funktionen DM_StringInit und DM_StringChange verwendet werden.

Beispiel

Dialogdatei

dialog YourDialog
function anyvalue StringOf(integer I);

on dialog start
{
  print StringOf(123);
  print StringOf(-42);
  exit();
}

C-Teil

...

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

Ab IDM-Version A.06.01.a

Siehe auch

Funktionen DM_IndexReturn, DM_StringChange, DM_StringInit, DM_ValueReturn