UpdateResourceA 函数 (winbase.h)

添加、删除或替换可移植可执行文件 (PE) 文件中的资源。 包含资源配置 (RC 配置) 数据的文件的资源更新存在一些限制: 非特定语言 (LN) 文件和特定于语言的资源 (.mui) 文件。

语法

BOOL UpdateResourceA(
  [in]           HANDLE hUpdate,
  [in]           LPCSTR lpType,
  [in]           LPCSTR lpName,
  [in]           WORD   wLanguage,
  [in, optional] LPVOID lpData,
  [in]           DWORD  cb
);

参数

[in] hUpdate

类型: 句柄

BeginUpdateResource 函数返回的模块句柄,引用要更新的文件。

[in] lpType

类型: LPCTSTR

要更新的资源类型。 或者,此参数可以是 MAKEINTRESOURCE (ID) ,其中 ID 是表示预定义资源类型的整数值,而不是指针。 如果字符串的第一个字符是井号 (#) ,则剩余字符表示指定资源类型的整数标识符的十进制数。 例如,字符串“#258”表示标识符 258。

有关预定义资源类型的列表,请参阅 资源类型

[in] lpName

类型: LPCTSTR

要更新的资源的名称。 或者,此参数可以是 MAKEINTRESOURCE (ID) ,其中 ID 是资源 ID,而不是指针。 创建新资源时,不要对此参数使用以“#”字符开头的字符串。

[in] wLanguage

类型: WORD

要更新的资源 的语言标识符 。 有关构成语言标识符的主要语言标识符和子语言标识符的列表,请参阅 MAKELANGID 宏。

[in, optional] lpData

类型: LPVOID

要插入到 hUpdate 指示的文件中的资源数据。 如果资源是预定义类型之一,则数据必须有效且正确对齐。 请注意,这是要存储在 hUpdate 指示的文件中的原始二进制数据,而不是 由 LoadIconLoadString 或其他特定于资源的负载函数提供的数据。 包含字符串或文本的所有数据都必须采用 Unicode 格式。 lpData 不得指向 ANSI 数据。

如果 lpDataNULLcbData 为 0,则会从 hUpdate 指示的文件中删除指定的资源。

[in] cb

类型:DWORD

lpData 中资源数据的大小(以字节为单位)。

返回值

类型: BOOL

如果成功,则返回 TRUE ,否则返回 FALSE 。 要获得更多的错误信息,请调用 GetLastError。

注解

建议在调用此函数之前不加载资源文件。 但是,如果该文件已加载,则不会导致返回错误。

应用程序可以重复使用 UpdateResource 来更改资源数据。 每次调用 UpdateResource 都会提供添加、删除和替换的内部列表,但实际上不会将数据写入 hUpdate 指示的文件。 应用程序必须使用 EndUpdateResource 函数将累积的更改写入文件。

此函数可以更新同时包含代码和资源的模块中的资源。

在 Windows 7 之前: 如果 lpDataNULLcbData 为非零值,则不会删除指定的资源,并引发异常。

从 Windows Vista 开始: 如上所述,包含 RC 配置数据的文件中的资源更新存在限制:LN 文件和 .mui 文件。 限制如下:

操作 LN 文件 .mui 文件
1. 添加 LN 或 .mui 文件中不存在的新类型。 在 LN 文件中添加类型,将作为非特定语言 (不可本地化) 并在 RC Config 数据中添加新类型或项 仅允许添加以下类型:文件版本、RC 配置数据、并行程序集 XML 清单。
2. 向现有类型添加新的资源项。 使用 RC Config 数据检查与此 LN 文件关联的 .mui 文件中是否存在该类型。 如果 .mui 文件中不存在该类型,请添加该项并将新项视为不可本地化。 如果 .mui 文件中存在该类型,则不允许添加 。 只能添加以下类型的项:文件版本、RC 配置数据、并行程序集 XML 清单。
3. 更新资源项。 使用 RC Config 数据检查与 LN 文件关联的 .mui 文件中是否存在该类型。 如果 .mui 文件中不存在该类型,则 LN 文件中允许此资源项更新。 否则,如果类型存在于与此 LN 文件关联的 .mui 文件中,则不允许此更新。 允许的唯一更新是以下类型的项:文件版本、RC 配置数据、并行程序集 XML 清单。
4. 为新语言添加类型/项目。 不允许。 不允许。
5. 删除现有类型/项目。 工作原理与案例 3 类似。 使用 RC Config 数据检查与 LN 文件关联的 .mui 文件中是否存在该类型。 如果不是,则允许从 LN 文件中删除类型/项。 否则,如果类型/项存在于与此 LN 文件关联的 .mui 文件中,则不允许删除。 允许删除的唯一类型是:文件版本、RC 配置数据、并行程序集 XML 清单;此外,只能删除这些类型的项。
6. 添加/删除/更新未包含在 RC Config 数据 (的类型,例如版本、并行程序集 XML 清单或 RC 配置数据本身) 。 允许。 允许。
7. 不可本地化数据的其他更新,例如 TYPELIB、reginst 等。 更新 LN 文件中的类型或项,将其视为不可本地化,并在 RC Config 数据中添加新类型或项。 不适用。
8. 添加 RC 配置数据。 可以完成,但未检查 RC 配置数据的完整性。 可以完成,但未检查 RC 配置数据的完整性。
 

示例

有关示例,请参阅 更新资源

注意

winbase.h 标头将 UpdateResource 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

BeginUpdateResource

概念性

EndUpdateResource

LoadIcon

LoadString

LockResource

MAKEINTRESOURCE

MAKELANGID

其他资源

引用

资源

SizeofResource