SHAnsiToUnicode 函数 (shlwapi.h)

[此函数可通过 Windows XP 和 Windows Server 2003 使用。 在后续版本的 Windows 中,它可能已更改或不可用。]

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

语法

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 相同。

要求

要求
最低受支持的客户端 Windows 2000 专业版、Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server、Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 shlwapi.h
DLL Shlwapi.dll (5.0 或更高版本)

另请参阅

MultiByteToWideChar

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCbLength

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

StringCchLength