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