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


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

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