Suchen und Laden von Ressourcen
Vor der Verwendung einer Ressource muss eine Anwendung sie in den Arbeitsspeicher laden. Die Funktionen FindResource und FindResourceEx suchen eine Ressource in einem Modul und geben ein Handle an 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 mithilfe von LoadResource geladen hat, entlädt das System den zugeordneten Arbeitsspeicher nur, wenn alle Verweise auf ihr Modul über FreeLibrary freigegeben werden. Anwendungen, die wiederholt auf dieselben oder viele Ressourcen innerhalb eines bestimmten Moduls zugreifen müssen, können leistungsbelastend sein, 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 einen beliebigen Ressourcentyp zu finden 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.
Wenn möglich, sollte eine Anwendung stattdessen eine der folgenden ressourcenspezifischen Funktionen verwenden, um Ressourcen in einem Aufruf zu finden und zu laden:
Funktion | Aktion | So entfernen Sie die Ressource |
---|---|---|
FormatMessage | Lädt und formatiert einen Nachrichtentabelleneintrag. | Keine Aktion erforderlich. |
LoadAccelerators | Lädt eine Acceleratortabelle. | 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 Arbeitsspeicher freigeben, der von Acceleratortabellen, Bitmaps, Cursorn, Symbolen und Menüs belegt ist, indem sie die entsprechenden Funktionen verwendet.
Arbeitsspeicher, der Ressourcen zugeordnet ist, die über FindResource und LoadResource geladen wurden, wird freigegeben, sobald das Modul durch einen Aufruf von FreeLibrary entladen wurde. Alle Ressourcen, die bei der Beendigung der Anwendung entladen bleiben, werden automatisch vom System freigegeben.