C++ 涉及LPWSTR的这种类型定义是什么意思?

C++ 涉及LPWSTR的这种类型定义是什么意思?,c++,windows,char,sal,lpwstr,C++,Windows,Char,Sal,Lpwstr,我正试图找到一种替代LPWSTR的方法来将项目移植到gcc typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR; 什么是空终止?那么,如果我做这样的事情是否安全: typedef WCHAR *LPWSTR typedef uu-WCHAR*NWPSTR、*LPWSTR、*PWSTR 部分是SAL注释。SAL是Microsoft特有的技术,用于注释函数参数、返回值、函数行为等,以帮助使用Visual Studio代码分析工具查

我正试图找到一种替代LPWSTR的方法来将项目移植到gcc

typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;
什么是空终止?那么,如果我做这样的事情是否安全:

typedef WCHAR   *LPWSTR 
typedef uu-WCHAR*NWPSTR、*LPWSTR、*PWSTR

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

<>代码> WCHAR< <代码> <强>在Windows平台SDK头中定义为“代码> WHARGART T < /Cyt >的TyPulf,它是微软Visual C++编译器中的<强> 16位<强>字符类型。这用作Unicode UTF-16编码的“字符单元”,这是Windows API的默认事实上的Unicode编码。
请注意,Linux上的GNU-GCC等编译器认为<代码> WCARYTT 是32位字符单元(不是16位),因此您必须注意代码的可移植性。

(注意:现代版本的Windows支持Unicode UTF-16和所谓的代理项对,因此您可以使用两个相邻的
WCHAR
s来定义代理项对。)


NWPSTR
LPWSTR
PWSTR
都是同义词,定义为指向
WCHAR
的指针,也就是说,考虑到
\u空终止的
SAL注释,它们是指向“原始的”C样式NUL终止的Unicode UTF-16字符串的指针

基本上,这是与经典C的
char*
相当的Windows Win32 Unicode

<>我已经在C++中编程了几年,我从来没有遇到过这个代码> NWPSTR ,老实说:

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

  • P
    :指针
  • W
    :“宽”,即
    WCHAR
    /
    WCHAR\t
    -基于,即Unicode UTF-16
  • STR
    :字符串
因此,
PWSTR
表示指向
WCHAR
/
WCHAR\t
字符串的指针,即Unicode UTF-16字符串,如上所述

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

而且,如果在这些名称中添加一个
,则只读
对应项就有typedef,例如:
LPCWSTR
基本上都是
const wchar t*
以NUL结尾的Unicode UTF-16字符串

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

typedef uu-WCHAR*NWPSTR、*LPWSTR、*PWSTR

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

<>代码> WCHAR< <代码> <强>在Windows平台SDK头中定义为“代码> WHARGART T < /Cyt >的TyPulf,它是微软Visual C++编译器中的<强> 16位<强>字符类型。这用作Unicode UTF-16编码的“字符单元”,这是Windows API的默认事实上的Unicode编码。
请注意,Linux上的GNU-GCC等编译器认为<代码> WCARYTT 是32位字符单元(不是16位),因此您必须注意代码的可移植性。

(注意:现代版本的Windows支持Unicode UTF-16和所谓的代理项对,因此您可以使用两个相邻的
WCHAR
s来定义代理项对。)


NWPSTR
LPWSTR
PWSTR
都是同义词,定义为指向
WCHAR
的指针,也就是说,考虑到
\u空终止的
SAL注释,它们是指向“原始的”C样式NUL终止的Unicode UTF-16字符串的指针

基本上,这是与经典C的
char*
相当的Windows Win32 Unicode

<>我已经在C++中编程了几年,我从来没有遇到过这个代码> NWPSTR ,老实说:

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

  • P
    :指针
  • W
    :“宽”,即
    WCHAR
    /
    WCHAR\t
    -基于,即Unicode UTF-16
  • STR
    :字符串
因此,
PWSTR
表示指向
WCHAR
/
WCHAR\t
字符串的指针,即Unicode UTF-16字符串,如上所述

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

而且,如果在这些名称中添加一个
,则只读
对应项就有typedef,例如:
LPCWSTR
基本上都是
const wchar t*
以NUL结尾的Unicode UTF-16字符串

你会的