Функция UpdateResourceW (winbase.h)
Добавляет, удаляет или заменяет ресурс в переносимом исполняемом файле (PE). Существуют некоторые ограничения на обновления ресурсов в файлах, содержащих данные конфигурации ресурсов (RC Config): файлы, не зависящие от языка (LN) и файлы ресурсов для конкретного языка (MUI).
Синтаксис
BOOL UpdateResourceW(
[in] HANDLE hUpdate,
[in] LPCWSTR lpType,
[in] LPCWSTR lpName,
[in] WORD wLanguage,
[in, optional] LPVOID lpData,
[in] DWORD cb
);
Параметры
[in] hUpdate
Тип: HANDLE
Дескриптор модуля, возвращаемый функцией BeginUpdateResource , ссылающийся на обновляемый файл.
[in] lpType
Тип: LPCTSTR
Обновляемый тип ресурса. Кроме того, вместо указателя этот параметр может быть MAKEINTRESOURCE(ID), где ID — это целочисленное значение, представляющее предопределенный тип ресурса. Если первым символом строки является знак фунта (#), то остальные символы представляют десятичное число, задающее целочисленный идентификатор типа ресурса. Например, строка "No 258" представляет идентификатор 258.
Список стандартных типов ресурсов см. в разделе Типы ресурсов.
[in] lpName
Тип: LPCTSTR
Имя обновляемого ресурса. Кроме того, вместо указателя этот параметр может иметь значение MAKEINTRESOURCE(ID), где ID — это идентификатор ресурса. При создании ресурса не используйте строку, которая начинается с символа #для этого параметра.
[in] wLanguage
Тип: WORD
Идентификатор языка обновляемого ресурса. Список идентификаторов основного языка и идентификаторов подязык, составляющих идентификатор языка, см. в макросе MAKELANGID .
[in, optional] lpData
Тип: LPVOID
Данные ресурса, которые необходимо вставить в файл, указанный hUpdate. Если ресурс является одним из предопределенных типов, данные должны быть допустимыми и правильно выровненными. Обратите внимание, что это необработанные двоичные данные, которые будут храниться в файле, указанном hUpdate, а не данные, предоставляемые LoadIcon, LoadString или другими функциями загрузки, зависящими от ресурсов. Все данные, содержащие строки или текст, должны быть в формате Юникода. lpData не должен указывать на данные ANSI.
Если lpData имеет значение NULL , а cbData равно 0, указанный ресурс удаляется из файла, указанного в hUpdate.
[in] cb
Тип: DWORD
Размер (в байтах) данных ресурса в lpData.
Возвращаемое значение
Тип: BOOL
Возвращает значение TRUE в случае успешного выполнения или false в противном случае. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Рекомендуется не загружать файл ресурсов перед вызовом этой функции. Однако если этот файл уже загружен, он не приведет к возврату ошибки.
Приложение может многократно использовать UpdateResource для внесения изменений в данные ресурса. Каждый вызов UpdateResource создает внутренний список добавлений, удалений и замен, но фактически не записывает данные в файл, указанный hUpdate. Приложение должно использовать функцию EndUpdateResource для записи накопленных изменений в файл.
Эта функция может обновлять ресурсы в модулях, содержащих как код, так и ресурсы.
До Windows 7: Если lpData имеет значение NULL , а cbData — ненулевое значение, указанный ресурс не удаляется и создается исключение.
Начиная с Windows Vista: Как отмечалось выше, существуют ограничения на обновления ресурсов в файлах, содержащих данные конфигурации rc: LN-файлах и MUI-файлах. Ниже приведены ограничения.
Действие | LN-файл | MUI-файл |
---|---|---|
1. Добавьте новый тип, который не существует в файлах LN или MUI. | Добавьте тип в файл LN и рассматривайте как не зависящий от языка (не локализуемый), а также добавьте новый тип или элемент в данные конфигурации rc. | Единственными допустимыми дополнениями являются следующие типы: версия файла, данные конфигурации rc, XML-манифест параллельной сборки. |
2. Добавьте новый элемент ресурса в существующий тип. | Использует данные конфигурации rc для проверка, существует ли тип в MUI-файлах, связанных с этим LN-файлом. Если тип не существует в MUI-файлах, добавьте элемент и обработайте новый элемент как не локализуемый. Если тип существует в MUI-файлах, добавление не допускается. | Можно добавлять только элементы следующих типов: версия файла, данные конфигурации rc, XML-манифест параллельной сборки. |
3. Обновление элемента ресурса. | Использует данные конфигурации rc для проверка, существует ли тип в MUI-файлах, связанных с LN-файлом. Если тип не существует в MUI-файлах, обновление этого элемента ресурса разрешено в LN-файле. В противном случае, если тип существует в MUI-файлах, связанных с этим LN-файлом, это обновление запрещено. | Допустимы только элементы следующих типов: версия файла, данные конфигурации rc, XML-манифест параллельной сборки. |
4. Добавьте тип или элемент для нового языка. | Не допускается. | Не допускается. |
5. Удалите существующий тип или элемент. | Работает аналогично варианту 3. Использует данные конфигурации rc для проверка, существует ли тип в MUI-файлах, связанных с LN-файлом. В противном случае удаление типа или элемента из LN-файла разрешено. В противном случае, если тип или элемент существует в MUI-файлах, связанных с этим LN-файлом, удаление не допускается. | Единственные типы, которые можно удалить: версия файла, данные конфигурации rc, xml-манифест параллельной сборки; кроме того, можно удалить только элементы этих типов. |
6. Добавьте, удалите или обновите тип, не включенный в данные конфигурации кандидата (например, версия, XML-манифест параллельной сборки или сами данные конфигурации rc). | разрешено. | разрешено. |
7. Другое обновление нелокируемых данных, таких как TYPELIB, reginst и т. д. | Обновите тип или элемент в LN-файле, рассматривайте как не локализуемые и добавьте новый тип или элемент в данные конфигурации-кандидата. | Не применяется |
8. Добавьте данные конфигурации rc. | Это можно сделать, но целостность данных конфигурации кандидата не проверяется. | Это можно сделать, но целостность данных конфигурации кандидата не проверяется. |
Примеры
Пример см. в разделе Обновление ресурсов.
Примечание
Заголовок winbase.h определяет UpdateResource в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | winbase.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |
См. также
Основные понятия
Другие ресурсы
Справочные материалы