什么是一个PWSTR,为什么使用这个命名与char *,std :: string或C ++中的CString相比?

在各种c + +代码中,你经常看到string的不同用法:PWSTR,char *,std :: string,CString等等。

与任何其他stringtypes相比,什么时候使用PWSTR是最佳时机?

一个PWSTR将是一个wchar_t字符串指针。 这是一个UNICODE(通常是UCS2)字符串,每个字符需要16位。

char*将是一个指针,每个字符8位。 这可能是ASCII,ANSI,UTF8或其他数百种其他编码之一。 尽管如果您需要字符串来保存英语以外的语言或特殊符号,您只需要担心编码。

一般来说,Windows API在内部都是UNICODE,因此大多数Windows程序员都使用wchar字符串。 但是,如果正确的符号是#defined ,那么std::stringCString都可以是UNICODE,所以你在PWSTRstd::stringCString之间的选择将是一个偏好问题或你使用的代码库约定。

无论您正在使用哪个库,都需要PWSTR 。 根据Windows中使用的命名约定,这是一个指向宽字符串的指针。

默认情况下,你应该使用std::string / std::wstring 。 只有当你与别人期望别的东西交流时,你才应该改变它。

你可以用c_str()方法从std::wstring获得一个PCWSTRCString是MFC,如果我记得。

PWSTR =在窗口中指向宽字符串= WCHAR *的指针

Windows SDK在类型和指向类型的指针的typedefs上非常安静。

“在罗马时” – 使用任何你正在处理的项目所需的字符串类型。 字符串类型不足以强调或尝试强制使用任何正在使用的方法。

它来自Windows API。

我记得这样。

它是一个W -ide字符串的P -toter。

它将用于Unicode应用程序。 它的用途是当你打电话给Windows。 最好的类型实际上是LPTSTR P指向T型的字符串(Unicode或ANSI)。

使用PWSTR的最佳时间是如果所有正在编辑/扩展的代码已经在使用它。 通常最好将代码保存在你正在编写的任何代码的范例中。

同样的,如果你正在大量使用以特定方式声明其字符串的特定库,那么通常最好将这种类型的字符串保存在自己的代码中。 所以使用Windows MFC,你会使用CString。 旧式的Win32通常是LPCTSTR和类似的。

这通常是风格问题,而不是特定的实现细节。

PWSTR是来自<windows.h>某个标识符。 在处理需要这样的事情的Windows API函数时最好使用它,并且最好避免使用它。

看一下Windows SDK中的WinNT.h文件 – 你会发现PWSTR是WCHAR *的一个typedef。 这不是一个宏观。