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

类型:HANDLE

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

如果成功或 FALSE,则返回 TRUE。 若要获取扩展的错误信息,请调用 GetLastError

言论

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

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

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

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

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

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

例子

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

注意

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

要求

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

另请参阅

BeginUpdateResource

概念

EndUpdateResource

LoadIcon

LoadString

LockResource

MAKEINTRESOURCE

MAKELANGID

其他资源

参考

资源

SizeofResource