Поиск и загрузка ресурсов
Перед использованием ресурса приложение должно загрузить его в память. Функции FindResource и FindResourceEx находят ресурс в модуле и возвращают дескриптор данных двоичного ресурса. FindResource находит ресурс по типу и имени. FindResourceEx находит ресурс по типу, имени и языку. Сведения о FindResource в этом разделе также относятся к FindResourceEx.
Функция LoadResource использует дескриптор ресурса, возвращенный FindResource , для загрузки ресурса в память. После того как приложение загрузит ресурс с помощью LoadResource, система выгрузит связанную память, только если все ссылки на его модуль освобождаются через FreeLibrary. Приложения, которым требуется многократно обращаться к тем же или нескольким ресурсам в определенном модуле, могут повлечь за собой снижение производительности из-за сопоставления памяти при повторяющихся вызовах LoadLibrary и FreeLibrary . Приложения должны хранить один дескриптор модуля, пока ресурсы не понадобятся, а затем вызывать FreeLibrary. После выгрузки модуля из памяти дескрипторы ресурсов становятся недопустимыми.
Приложение может использовать FindResource и LoadResource для поиска и загрузки любого типа ресурсов, но эти функции следует использовать только в одной из следующих ситуаций:
- Если приложению не удается получить доступ к ресурсу с помощью существующей функции, зависят от конкретного ресурса.
- Когда приложение должно получить доступ к ресурсу в виде двоичных данных для последующих вызовов функций.
По возможности приложение должно использовать одну из следующих функций для поиска и загрузки ресурсов в одном вызове:
Функция | Действие | Удаление ресурса |
---|---|---|
FormatMessage | Загружает и форматирует запись таблицы сообщений. | Никаких действий не требуется. |
LoadAccelerators | Загружает таблицу ускорителей. | DestroyAcceleratorTable |
LoadBitmap | Загружает ресурс растрового изображения. | DeleteObject |
LoadCursor | Загружает ресурс курсора. | DestroyCursor |
LoadIcon | Загружает ресурс значка. | DestroyIcon |
LoadImage | Загружает значок, курсор или точечный рисунок. | DestroyIcon, DestroyCursor, DeleteObject |
LoadMenu | Загружает ресурс меню. | DestroyMenu |
LoadString | Загружает запись таблицы строк. | Никаких действий не требуется. |
Обратите внимание на функции выпуска в таблице выше. Перед прекращением работы приложение должно освободить память, занятую таблицами ускорителей, растровыми изображениями, курсорами, значками и меню, с помощью соответствующих функций.
Память, связанная с ресурсами, загруженными с помощью FindResource и LoadResource , будет освобождена после выгрузки модуля вызовом FreeLibrary. Все ресурсы, которые остаются выгруженными при завершении работы приложения, будут автоматически освобождены системой.