涉及 LPWSTR 的这个 typedef 意味着什么?
What does this typedef mean involving LPWSTR?
我正在尝试寻找 LPWSTR 的替代品来将项目移植到 gcc。
typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;
什么是空终止?如果我这样做是安全的:
typedef WCHAR *LPWSTR
typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;
__nullterminated
部分是 SAL 注释。 SAL 是一项 Microsoft 特定技术,用于注释函数参数、return 值、函数行为等,以帮助使用 Visual Studio 代码分析工具查找错误并减少 C/C++ 代码缺陷。您可以在 MSDN 上阅读有关 SAL 的信息:
WCHAR
在 Windows 平台 SDK header 中定义,基本上作为 wchar_t
的类型定义,它是Microsoft Visual C++ 编译器中的 16 位 字符类型。这用作 "character unit" Unicode UTF-16 编码,这是默认的 de facto Windows APIs.
的 Unicode 编码
请注意,Linux 上的 GNU GCC 等其他编译器将 wchar_t
视为 32 位 字符单元( 而非 16 -bit),所以这里要注意代码的可移植性。
(注意:Windows 的现代版本支持 Unicode UTF-16 和所谓的 代理对 ,所以你可以有一个 couple 的相邻 WCHAR
定义代理对。)
NWPSTR
、LPWSTR
和 PWSTR
都是同义词,定义为 指向 WCHAR
的指针 ,即同时考虑 __nullterminated
SAL 注释,它们是指向 [=133 的指针=] C-style NUL-terminated Unicode UTF-16 字符串.
基本上,这是 Windows Win32 Unicode 等同于经典 C 的 char*
。
我用 C++ 编程 Windows 已经好几年了,老实说,我从来没有遇到过这个 NWPSTR
:)
名称 PWSTR
是使用以下元素构建的:
P
: 指针
W
:"wide",即基于WCHAR
/wchar_t
,即Unicode UTF-16
STR
: 字符串
因此,PWSTR
表示指向 WCHAR
/wchar_t
字符串的指针,即 Unicode UTF-16 字符串,如上所述。
LPWSTR
只是同一事物的旧名称;最初的 L
表示 "long",这可以追溯到 "long pointers"可以访问比 "short" 或 "near" 指针更远的内存:)那些日子已经不复存在了。
而且,如果你在这些名字中加入 C
,你就有了 read-only const
的类型定义对应,例如:PCWSTR
或LPCWSTR
基本上是const wchar_t*
NUL-terminated Unicode UTF-16 字符串。
您会发现 PCWSTR
和较旧的等效项 LPCWSTR
在 Windows header 文件和 中使用了很多 148=] API 文档来表示 Unicode UTF-16 "input"(即 const
)C-style NUL-terminated 字符串.
我正在尝试寻找 LPWSTR 的替代品来将项目移植到 gcc。
typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;
什么是空终止?如果我这样做是安全的:
typedef WCHAR *LPWSTR
typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;
__nullterminated
部分是 SAL 注释。 SAL 是一项 Microsoft 特定技术,用于注释函数参数、return 值、函数行为等,以帮助使用 Visual Studio 代码分析工具查找错误并减少 C/C++ 代码缺陷。您可以在 MSDN 上阅读有关 SAL 的信息:
WCHAR
在 Windows 平台 SDK header 中定义,基本上作为 wchar_t
的类型定义,它是Microsoft Visual C++ 编译器中的 16 位 字符类型。这用作 "character unit" Unicode UTF-16 编码,这是默认的 de facto Windows APIs.
的 Unicode 编码
请注意,Linux 上的 GNU GCC 等其他编译器将 wchar_t
视为 32 位 字符单元( 而非 16 -bit),所以这里要注意代码的可移植性。
(注意:Windows 的现代版本支持 Unicode UTF-16 和所谓的 代理对 ,所以你可以有一个 couple 的相邻 WCHAR
定义代理对。)
NWPSTR
、LPWSTR
和 PWSTR
都是同义词,定义为 指向 WCHAR
的指针 ,即同时考虑 __nullterminated
SAL 注释,它们是指向 [=133 的指针=] C-style NUL-terminated Unicode UTF-16 字符串.
基本上,这是 Windows Win32 Unicode 等同于经典 C 的 char*
。
我用 C++ 编程 Windows 已经好几年了,老实说,我从来没有遇到过这个 NWPSTR
:)
名称 PWSTR
是使用以下元素构建的:
P
: 指针W
:"wide",即基于WCHAR
/wchar_t
,即Unicode UTF-16STR
: 字符串
因此,PWSTR
表示指向 WCHAR
/wchar_t
字符串的指针,即 Unicode UTF-16 字符串,如上所述。
LPWSTR
只是同一事物的旧名称;最初的 L
表示 "long",这可以追溯到 "long pointers"可以访问比 "short" 或 "near" 指针更远的内存:)那些日子已经不复存在了。
而且,如果你在这些名字中加入 C
,你就有了 read-only const
的类型定义对应,例如:PCWSTR
或LPCWSTR
基本上是const wchar_t*
NUL-terminated Unicode UTF-16 字符串。
您会发现 PCWSTR
和较旧的等效项 LPCWSTR
在 Windows header 文件和 中使用了很多 148=] API 文档来表示 Unicode UTF-16 "input"(即 const
)C-style NUL-terminated 字符串.