SHAnsiToUnicode 函数 (shlwapi.h)

[此函数通过 Windows XP 和 Windows Server 2003 提供。 在后续版本的 Windows 中,可能会更改或不可用。

将字符串从 ANSI 代码页转换为 Unicode 代码页。

Syntax

int SHAnsiToUnicode(
  [in]  PCSTR pszSrc,
  [out] PWSTR pwszDst,
        int   cwchBuf
);

参数

[in] pszSrc

类型: PCSTR

指向要转换为 Unicode 的以 null 结尾的 ANSI 字符串的指针。

[out] pwszDst

类型: PWSTR

指向缓冲区的指针,当此函数成功返回时,在 ANSI 字符转换为 Unicode(WCHAR)后,接收 pszSrc 指定的字符串。 缓冲区必须足够大,才能包含 cwchBuf 参数指定的 Unicode 字符数,包括终止 null 字符。

cwchBuf

类型:int

pwszDst 指向的缓冲区可以包含的 Unicode 字符数。 此参数必须大于零。

返回值

类型:int

返回写入 pwszDst 的 Unicode 字符数,包括终止 null 字符。 如果失败,则返回 0。

注解

安全警告: 正确使用此函数可能会损害应用程序的安全性。 例如,如果 pwszDst 缓冲区不够大,无法包含 cwchBuf 指定的字符数,则可能会出现缓冲区溢出。 如果发生访问冲突,缓冲区溢出可能会对应用程序造成拒绝服务攻击。 在最坏的情况下,缓冲区溢出可能会允许攻击者将可执行代码注入进程,尤其是在 pwszDst 是基于堆栈的缓冲区时。 复制整个字符串时,请注意 sizeof 返回字节数,这不是用于 cwchBuf 参数的正确值。 请改用 sizeof(pwszDst)/sizeof(WCHAR)。 请注意,此方法假定 pwszDst 是数组,而不是指针。

如果 pwszDst 缓冲区不够大,无法包含整个转换的输出字符串,则会截断该字符串以适应缓冲区。 无法检测到返回字符串已被截断。 即使字符串已被截断,字符串也始终以 null 结尾。 这可确保将不超过 cwchBuf 字符复制到 pwszDst。 不会尝试避免截断 Unicode 代理项对中间的字符串。

如果 pszSrcpwszDst 缓冲区重叠,则函数的行为是未定义的。

注意 不要假定函数未更改字符串终止 null 字符之后的输出缓冲区中的任何字符。 字符串终止 null 字符之后的输出缓冲区的内容未定义,最多包括缓冲区中的最后一个字符。
 
SHAnsiToTChar 定义为与 SHAnsiToUnicode 相同。

要求

Requirement 价值
最低支持的客户端 Windows 2000 Professional、Windows XP [仅限桌面应用]
支持的最低服务器 Windows 2000 Server、Windows Server 2003 [仅限桌面应用]
目标平台 Windows操作系统
Header shlwapi.h
Library mincore_downlevel.lib
DLL Shlwapi.dll (版本 5.0 或更高版本)

另请参阅

MultiByteToWideChar

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCbLength

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

StringCchLength