Поделиться через


Поиск и загрузка ресурсов

Перед использованием ресурса приложение должно загрузить его в память. Функции 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. Все ресурсы, которые остаются выгруженными при завершении работы приложения, будут автоматически освобождены системой.