Ressourcendateiformate
In diesem Abschnitt wird das Format der binären Ressourcendatei beschrieben, die der Ressourcencompiler basierend auf dem Inhalt der Ressourcendefinitionsdatei erstellt. Diese Datei hat in der Regel die Erweiterung .res. Der Linker reformiert die RES-Datei in eine Ressourcenobjektdatei und verknüpft sie dann mit der ausführbaren Datei einer Anwendung.
Eine binäre Ressourcendatei besteht aus einer Reihe verketteter Ressourceneinträge. Jeder Eintrag besteht aus einem Ressourcenheader und den Daten für diese Ressource. Ein Ressourcenheader ist in der Datei DWORD ausgerichtet und besteht aus folgendem:
- Ein DWORD , das die Größe des Ressourcenheaders enthält.
- Ein DWORD , das die Größe der Ressourcendaten enthält.
- Der Ressourcentyp
- Der Ressourcenname
- Zusätzliche Ressourceninformationen
Die RESOURCEHEADER-Struktur beschreibt das Format dieses Headers. Die Daten für die Ressource folgen dem Ressourcenheader und sind für jeden Ressourcentyp spezifisch. Einige Ressourcen verwenden auch eine ressourcenspezifische Gruppenheaderstruktur, um Informationen zu einer Gruppe von Ressourcen bereitzustellen.
Zugriffstastentabellenressourcen
Eine Acceleratortabelle ist ein Ressourceneintrag in einer Ressourcendatei. Es verfügt nicht über einen Gruppenheader. Eine ACCELTABLEENTRY-Struktur beschreibt jeden Eintrag in der Acceleratortabelle. Mehrere Zugriffstastentabellen sind zulässig.
Cursor- und Symbolressourcen
Das System behandelt jedes Symbol und jeden Cursor als einzelne Datei. Diese werden jedoch in RES-Dateien und ausführbaren Dateien als Gruppe von RT_GROUP_ICON Symbolressourcen oder als RT_GROUP_CURSOR Gruppe von Cursorressourcen gespeichert. Die Dateiformate von Symbol- und Cursorressourcen sind ähnlich. In der RES-Datei folgt ein Ressourcengruppenheader allen einzelnen Symbol- oder Cursorgruppenkomponenten.
Der Gruppenheader für Symbol- und Cursorressourcen besteht aus einer NEWHEADER-Struktur sowie einer oder mehreren RESDIR-Strukturen . Für jedes Symbol oder jeden Cursor gibt es eine RESDIR-Struktur . Der Gruppenheader enthält die Informationen, die eine Anwendung benötigt, um das richtige Symbol oder den richtigen Cursor für die Anzeige auszuwählen. Sowohl der Gruppenheader als auch die Daten, die für jedes Symbol oder jeden Cursor in der Gruppe wiederholt werden, haben eine feste Länge. Dadurch kann die Anwendung nach dem Zufallsprinzip auf die Informationen zugreifen.
Das Format jedes RT_ICON Symbols oder RT_CURSOR Cursorressourcenkomponente ähnelt stark dem Format der .ico/.cur-Datei. Jedes Bild wird in einer BITMAPINFO-Struktur gespeichert, gefolgt von den DIB-Bits (Device-Independent Bitmap) der XOR-Maske des Symbols. Die monochromen DIB-Bits der AND-Maske folgen den DIB-Farbbits. Ein wichtiger Unterschied zwischen Cursorn und Symbolen besteht darin, dass Cursor eine LOCALHEADER-Struktur mit einem Hotspot haben, der vor den Bitmapdaten eingefügt wird, symbole hingegen nicht.
Da Windows Vista RT_ICON Symbol oder RT_CURSOR Cursorressource möglicherweise PNG-komprimierte Bilddaten enthalten.
Dialogfeldressourcen
Ein Dialogfeld ist auch ein Ressourceneintrag in der Ressourcendatei. Sie besteht aus einer DLGTEMPLATE-Dialogfeldheaderstruktur und einer DLGITEMTEMPLATE-Struktur für jedes Steuerelement im Dialogfeld. Die Strukturen DLGTEMPLATEEX und DLGITEMTEMPLATEEX beschreiben das Format erweiterter Dialogfeldressourcen.
Schriftarten Ressourcen
Schriftarten werden in der Ressourcendatei als Gruppe von Ressourcen gespeichert. Einzelne Schriftarten bilden eine Schriftartgruppe. Eine RESSOURCENdefinitionsanweisung der FONT-Anweisung im . Die RC-Datei definiert jede Schriftart. Jede einzelne Schriftart in der Ressource besteht aus dem vollständigen Inhalt der zugehörigen FNT-Datei. Eine FONTGROUPHDR-Struktur folgt allen einzelnen Schriftartkomponenten in der RES-Datei.
Schriftartressourcen werden den Ressourcen einer bestimmten Anwendung nicht hinzugefügt. Stattdessen werden sie normalerweise ausführbaren Dateien mit der Erweiterung .fon hinzugefügt. Diese Dateien sind in der Regel nur Ressourcen-DLLs und nicht Anwendungen.
Menüressourcen
Eine Menüressource besteht aus einer MENUHEADER-Struktur , gefolgt von einer oder mehreren NORMALMENUITEM - oder POPUPMENUITEM-Strukturen , eine für jedes Menüelement in der Menüvorlage. Die MENUEX_TEMPLATE_HEADER und die MENUEX_TEMPLATE_ITEM-Strukturen beschreiben das Format erweiterter Menüressourcen.
Nachrichtentabellenressourcen
Eine Nachrichtentabelle ist eine Ressource, die formatierten Text für die Anzeige als Fehlermeldung oder in einem Meldungsfeld enthält. Die Standard-Struktur in einer Nachrichtentabellenressource ist die MESSAGE_RESOURCE_DATA-Struktur.
Versionsressourcen
Die Standard-Struktur in einer Versionsressource ist die VS_FIXEDFILEINFO-Struktur. Weitere Strukturen umfassen die VarFileInfo-Struktur zum Speichern von Sprachinformationsdaten und StringFileInfo für benutzerdefinierte Zeichenfolgeninformationen. Alle Zeichenfolgen in einer Versionsressource haben das Unicode-Format. Jeder Informationsblock wird an einer DWORD-Grenze ausgerichtet.