Suchen und Laden von Ressourcen
Vor der Verwendung einer Ressource muss sie von einer Anwendung in den Arbeitsspeicher geladen werden. Die Funktionen FindResource und FindResourceEx suchen eine Ressource in einem Modul und geben ein Handle für die binären Ressourcendaten zurück. FindResource sucht eine Ressource nach Typ und Name. FindResourceEx sucht die Ressource nach Typ, Name und Sprache. Informationen zu FindResource in diesem Thema gelten auch für FindResourceEx.
Die LoadResource-Funktion verwendet das von FindResource zurückgegebene Ressourcenhandle, um die Ressource in den Arbeitsspeicher zu laden. Nachdem eine Anwendung eine Ressource mit loadResource geladen hat, entlädt das System den zugeordneten Arbeitsspeicher nur, wenn alle Verweise auf das Modul über FreeLibraryfreigegeben werden. Anwendungen, die wiederholt auf dieselben oder viele Ressourcen innerhalb eines bestimmten Moduls zugreifen müssen, können leistungseinbußen verursachen, da die Speicherzuordnung in wiederholten LoadLibrary- und FreeLibrary-Aufrufen erfolgt. Anwendungen sollten ein einzelnes Modulhandle speichern, bis Ressourcen nicht mehr benötigt werden, und dann FreeLibrary aufrufen. Nachdem ein Modul aus dem Arbeitsspeicher entladen wurde, werden Ressourcenhandles ungültig.
Eine Anwendung kann FindResource und LoadResource verwenden, um beliebige Ressourcentypen zu suchen und zu laden. Diese Funktionen sollten jedoch nur in einer der folgenden Situationen verwendet werden:
- Wenn die Anwendung nicht mithilfe einer vorhandenen ressourcenspezifischen Funktion auf die Ressource zugreifen kann.
- Wenn die Anwendung für nachfolgende Funktionsaufrufe als Binärdaten auf die Ressource zugreifen muss.
Nach Möglichkeit sollte eine Anwendung stattdessen eine der folgenden ressourcenspezifischen Funktionen verwenden, um Ressourcen in einem Aufruf zu suchen und zu laden:
| Funktion | Aktion | So entfernen Sie eine Ressource |
|---|---|---|
| FormatMessage | Lädt und formatiert einen Nachrichtentabelleneintrag. | Keine Aktion erforderlich. |
| LoadAccelerators | Lädt eine Zugriffstastentabelle. | DestroyAcceleratorTable |
| LoadBitmap | Lädt eine Bitmapressource. | DeleteObject |
| LoadCursor | Lädt eine Cursorressource. | DestroyCursor |
| LoadIcon | Lädt eine Symbolressource. | DestroyIcon |
| Loadimage | Lädt ein Symbol, einen Cursor oder eine Bitmap. | DestroyIcon, DestroyCursor, DeleteObject |
| LoadMenu | Lädt eine Menüressource. | DestroyMenu |
| LoadString | Lädt einen Zeichenfolgentabelleneintrag. | Keine Aktion erforderlich. |
Beachten Sie die Releasefunktionen in der obigen Tabelle. Vor dem Beenden sollte eine Anwendung den Von Zugriffstastentabellen, Bitmaps, Cursorn, Symbolen und Menüs belegten Arbeitsspeicher mithilfe der entsprechenden Funktionen freigeben.
Arbeitsspeicher, der Ressourcen zugeordnet ist, die über FindResource und LoadResource geladen wurden, wird freigegeben, sobald das Modul durch einen Aufruf von FreeLibraryentladen wurde. Alle Ressourcen, die beim Beenden der Anwendung entladen bleiben, werden automatisch vom System freigegeben.