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.