3.74 DM_StringChange

Diese Funktion kann zur Änderung bzw. Manipulation eines gemanagten Strings verwendet werden.

Neben der reinen Ersetzung des Strings ist über die DMF_AppendValue-Option das Konkatenieren von Strings möglich.

Handelt es sich beim pstring-Parameter um einen noch ungemanagten String, so wird dieser kopiert und von da an vom IDM gemanagt. Wurde dabei noch die Option DMF_StaticValue gesetzt, wird dieser als statischer bzw. globaler String behandelt und nicht wie sonst bei der Rückkehr der Funktion wieder freigegeben.

Grundsätzlich dürfen nur String-Argumente oder lokale bzw. globale Strings gemanagt werden.

DM_Boolean DML_default DM_EXPORT DM_StringChange
(
  DM_String * pstring,
  DM_String   newstring,
  DM_Options  options
)

Parameter

<-> DM_String * pstring

Dieser Parameter verweist auf die String-Referenz die manipuliert werden soll. Es kann sich dabei um einen schon gemanagten String handeln, muss es aber nicht.

-> DM_String newstring

Dieser Parameter verweist auf den String, welcher der String-Referenz (pstring-Parameter) zugewiesen oder an sie angehängt werden soll.

-> DM_Options options

Hier sind folgende Optionen möglich:

Option

Bedeutung

DMF_StaticValue

Bei der automatischen Umwandlung des pstring-Parameters in eine gemanagte String-Referenz wird diese als statische bzw. globale String-Referenz behandelt.

DMF_AppendValue

Der String im newstring-Parameter wird an den String im pstring-Parameter angehängt.

Rückgabewert

DM_TRUE

String wurde erfolgreich manipuliert.

DM_FALSE

Ein Fehler ist aufgetreten. Dabei kann es sich um einen falschen runstate bei Aufruf handeln, oder aber eine ungültigen String-Referenz.

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_StringInit, DM_StringReturn