Stringtables speichern eine Reihe von Strings, die man einzeln laden kann. Die Stringtable an sich ist aber keine Ressource, sondern nur ein virtueller Container für die eigentlichen Strings und sieht folgendermaßen aus:
STRINGTABLE
{
100 "Hello, world"
200 "Ein sehr langer String \
der auf mehrere Zeilen verteilt ist"
300 "Ein anderer String \012der in der nächsten Zeile
weitergeht"
}
Die Stringtable besteht also aus einer Liste Strings, die in doppelten Anführungszeichen steht. Der Backslash am Ende einer Zeile (es dürfen auch keine Leerzeichen folgen) dient dazu, lange Strings auf mehrere Zeilen zu verteilen. Die Zeichenfolge \012 steht für eine neue Zeile.
Ein NULL-Terminator ist nicht erforderlich, weil er durch
var buf: PChar; begin GetMem(buf, 100); LoadString(hInstance, MAKEINTRESSOURCE(100), buf, 100);
{ ... } end;
Die Variable buf enthält jetzt den String mit dem Identifier 100. LoadString fügt automatisch den NULL-Terminator an den String an.