Udostępnij za pośrednictwem


Znajdowanie i ładowanie zasobów

Przed użyciem zasobu aplikacja musi załadować ją do pamięci. Funkcje FindResource i FindResourceEx znajdują zasób w module i zwracają uchwyt do danych zasobów binarnych. FindResource lokalizuje zasób według typu i nazwy. FindResourceEx lokalizuje zasób według typu, nazwy i języka. Informacje o FindResource w tym temacie odnoszą się również do FindResourceEx.

Funkcja LoadResource używa dojścia zasobu zwróconego przez FindResource w celu załadowania zasobu do pamięci. Po załadowaniu zasobu przez aplikację przy użyciu LoadResource, system zwolni skojarzoną pamięć tylko wtedy, gdy wszystkie odwołania do modułu zostaną zwolnione poprzez FreeLibrary. Aplikacje, które muszą wielokrotnie uzyskiwać dostęp do tych samych lub wielu zasobów w ramach określonego modułu, mogą doświadczać spadku wydajności z powodu mapowania pamięci przy wielokrotnych wywołaniach LoadLibrary i FreeLibrary. Aplikacje powinny przechowywać pojedynczy uchwyt modułu, dopóki zasoby nie będą już potrzebne, a następnie wywołać FreeLibrary. Po usunięciu modułu z pamięci uchwyty zasobów staną się nieprawidłowe.

Aplikacja może używać FindResource i LoadResource, aby znaleźć i załadować dowolny typ zasobu, ale te funkcje powinny być używane tylko w jednej z następujących sytuacji:

  • Gdy aplikacja nie może uzyskać dostępu do zasobu przy użyciu istniejącej funkcji specyficznej dla zasobów.
  • Gdy aplikacja musi uzyskać dostęp do zasobu jako danych binarnych dla kolejnych wywołań funkcji.

Jeśli to możliwe, aplikacja powinna zamiast tego użyć jednej z następujących funkcji specyficznych dla zasobów, aby znaleźć i załadować zasoby w jednym wywołaniu:

Funkcja Akcja Aby usunąć zasób
FormatMessage Ładuje i formatuje wpis tabeli komunikatów. Nie jest wymagana żadna akcja.
LoadAccelerators Ładuje tabelę przyspieszeń. DestroyAcceleratorTable
LoadBitmap Ładuje zasób mapy bitowej. UsuńObiekt
LoadCursor Ładuje zasób kursora. DestroyCursor
LoadIcon Ładuje zasób ikony. DestroyIcon
LoadImage Ładuje ikonę, kursor lub mapę bitową. DestroyIcon, DestroyCursor, DeleteObject
LoadMenu Ładuje zasób menu. DestroyMenu
LoadString Ładuje wpis tabeli stringów. Nie jest wymagana żadna akcja.

 

Zwróć uwagę na funkcje wydania w powyższej tabeli. Przed zakończeniem aplikacja powinna zwolnić pamięć zajmowaną przez tabele akceleratora, mapy bitowe, kursory, ikony i menu przy użyciu odpowiednich funkcji.

Pamięć skojarzona z zasobami załadowanymi za pośrednictwem FindResource i LoadResource zostanie zwolniona po zwolnieniu modułu przez wywołanie FreeLibrary. Wszystkie zasoby, które pozostają rozładowane po zakończeniu działania aplikacji, zostaną automatycznie zwolnione przez system.