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


Функция 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

См. также

BeginUpdateResource

Основные понятия

EndUpdateResource

LoadIcon

LoadString

LockResource

MAKEINTRESOURCE

MAKELANGID

Другие ресурсы

Справочные материалы

Ресурсы

SizeofResource