这个类型定义意味着什么涉及LPWSTR



我正在尝试找到LPWSTR的替代品,用于将项目移植到gcc。

typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;

什么是空终止? 那么如果我做这样的事情会安全吗:

typedef WCHAR   *LPWSTR 

typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;

__nullterminated部分是 SAL 注释。SAL 是一种Microsoft特定的技术,用于批注函数参数、返回值、函数行为等,以帮助使用 Visual Studio 代码分析工具查找错误并减少 C/C++ 代码缺陷。您可以在 MSDN 上阅读有关 SAL 的信息:

使用 SAL 注释减少 C/C++ 代码缺陷

WCHAR在Windows平台SDK头中基本上被定义为wchar_t的typedef,这是Microsoft Visual C++编译器中的16位字符类型。这被用作 Unicode UTF-16 编码的"字符单元",这是 Windows API 的默认事实上的 Unicode 编码。
请注意,其他编译器(如 Linux 上的 GNU GCC)认为wchar_t是一个 32 位字符单元(不是 16 位),因此您必须注意代码的可移植性。

(注意:现代版本的 Windows 支持具有所谓代理项对的 Unicode UTF-16,因此您可以让几个相邻的WCHAR定义代理项对

NWPSTRLPWSTRPWSTR都是同义词,定义为指向WCHAR指针,即也考虑SAL注解__nullterminated它们是指向"原始"C样式NUL终止的Unicode UTF-16字符串的指针。

基本上,这是Windows Win32 Unicode等同于经典C的char*

我已经在C++中编写Windows好几年了,老实说,我从来没有遇到过这种NWPSTR:)

名称PWSTR是使用以下元素构建的:

  • P : 指针
  • W:"宽",即 WCHAR/基于wchar_t,即Unicode UTF-16
  • STR : 字符串

因此,PWSTR表示指向WCHAR/wchar_t字符串的指针,即Unicode UTF-16字符串,如上所述。

LPWSTR只是同一事物的旧名称;最初的L意思是"长",这可以追溯到"长指针"可以比"短"或"近"指针更远地访问内存的时代:)那些日子已经不复存在了。

而且,如果你在这些名称中加上一个C,你就有只读const对应项的typedefs,例如: PCWSTRLPCWSTR基本上const wchar_t*以NUL结尾的Unicode UTF-16字符串

你会发现PCWSTR和较旧的等效LPCWSTR在Windows头文件和Windows API文档中大量使用来表示Unicode UTF-16"输入"(即 constC 样式的 NUL 终止字符串

相关内容

  • 没有找到相关文章

最新更新