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.