LoadStringW 函数 (winuser.h)
从与指定模块关联的可执行文件加载字符串资源,并将字符串复制到具有终止 null 字符的缓冲区中,或者返回指向字符串资源本身的只读指针。
语法
int LoadStringW(
[in, optional] HINSTANCE hInstance,
[in] UINT uID,
[out] LPWSTR lpBuffer,
[in] int cchBufferMax
);
参数
[in, optional] hInstance
类型:HINSTANCE
其可执行文件包含字符串资源的模块实例的句柄。 若要获取应用程序本身的句柄,请使用 NULL调用 GetModuleHandle 函数。
[in] uID
类型:UINT
要加载的字符串的标识符。
[out] lpBuffer
类型:LPTSTR
要接收字符串的缓冲区(如果 cchBufferMax 为非零)或指向字符串资源本身的只读指针(如果 cchBufferMax 为零)。 必须具有足够的长度才能保存指针(8 个字节)。
[in] cchBufferMax
类型:int
缓冲区的大小(以字符为单位)。 如果字符串长度超过指定的字符数,则字符串将被截断并以 null 结尾。 如果此参数为 0,则 lpBuffer 接收指向字符串资源本身的只读指针。
返回值
类型:int
如果函数成功,则返回值为下列值之一:
- 复制到缓冲区中的字符数(如果 cchBufferMax 为非零),不包括终止 null 字符。
- lpBuffer 指向的字符串资源中的字符数(如果 cchBufferMax 为零)。 字符串资源不能保证在模块的资源表中以 null 结尾,可以使用此值来确定字符串资源结束的位置。
- 如果字符串资源不存在,则为零。
若要获取扩展的错误信息,请调用 GetLastError。
言论
如果将 0 传递给 cchBufferMax 以返回指向 lpBuffer 参数中的字符串资源的只读指针,请使用返回值中的字符数来确定字符串资源的长度。 无法保证字符串资源在模块的资源表中以 null 结尾。 但是,资源表可以包含 null 字符。 字符串资源存储在 16 个字符串块中,块中的任何空槽都由 null 字符指示。
安全备注
正确使用此函数可能会损害应用程序的安全性。 不正确的使用包括指定 nBufferMax 参数中的错误大小。 例如,如果 lpBuffer 指向声明为TCHAR szBuffer[100]
的缓冲区 szBuffer,则 sizeof(szBuffer)会提供缓冲区的大小(以字节为单位),这可能导致函数 Unicode 版本的缓冲区溢出。 缓冲区溢出情况是应用程序中出现许多安全问题的原因。 在这种情况下,使用 sizeof(szBuffer)/sizeof(TCHAR)
或 sizeof(szBuffer)/sizeof(szBuffer[0])
将为缓冲区提供适当的大小。
例子
有关示例,请参阅 创建子窗口
注意
winuser.h 标头将 LoadString 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | 窗户 |
标头 | winuser.h (包括 Windows.h) |
库 | User32.lib |
DLL | User32.dll |
另请参阅
概念
其他资源
参考