Что такое PWSTR и почему используется это именование по сравнению с char *, std :: string или CString в C ++? - PullRequest
6 голосов
/ 19 января 2010

В различных кодах C ++ вы часто видите различное использование строк: PWSTR, char *, std :: string, CString и т. Д. *

Когда лучше всего использовать PWSTR по сравнению с любым другим типом строки?

Ответы [ 7 ]

5 голосов
/ 19 января 2010

a PWSTR будет wchar_t строковым указателем. Это строка UNICODE (обычно UCS2), каждый символ занимает 16 бит.

a char* будет указателем 8 бит на символ. это может быть ASCII, ANSI, UTF8 или одна из многих сотен других кодировок. Хотя вам нужно беспокоиться о кодировках, только если вам нужна строка для хранения языков, отличных от английского или специальных символов.

В целом, Windows API все UNICODE, поэтому большинство программистов Windows используют строки wchar. Но std::string и CString оба могут быть UNICODE, если правильные символы #defined, поэтому ваш выбор между PWSTR, std::string и CString будет зависеть от предпочтения или соглашения кодовой базы, с которой вы работаете с.

4 голосов
/ 19 января 2010

Когда любая библиотека, с которой вы работаете, хочет PWSTR.Это, согласно соглашению об именах, используемому в Windows, указатель на строку широких символов.

По умолчанию вы должны использовать std::string / std::wstring.Только когда вы общаетесь с кем-то, ожидающим чего-то другого, вы можете изменить это.

Вы можете получить PCWSTR из std::wstring с помощью метода c_str().CString - это MFC, если я помню.

2 голосов
/ 19 января 2010

PWSTR = указатель на широкую строку = WCHAR * в окнах

Windows SDK очень увлечен typedef для типов и указателями на типы.

«Когда в Риме» - используйте любой тип строки, который требуется для проекта, над которым вы работаете. Типы строк не настолько важны, чтобы подчеркивать или пытаться навязать свой единственно верный путь к тому, что используется.

1 голос
/ 19 января 2010

PWSTR - это идентификатор где-то в <windows.h>. Лучше всего использовать его при работе с функциями Windows API, которые требуют такого, и лучше избегать в противном случае.

1 голос
/ 19 января 2010

Лучшее время для использования PWSTR - это если весь код, который вы редактируете / расширяете, уже использует его. Обычно лучше всего сохранять кодирование в парадигме любого кода, над которым вы работаете.

Точно так же, если вы интенсивно используете конкретную библиотеку, которая определенным образом объявляет свои строки, обычно лучше сохранить этот тип строки в вашем собственном коде. Поэтому, работая с Windows MFC, вы бы использовали CString. Win32 в старом стиле обычно будет LPCTSTR и аналогичными.

Часто это вопрос стиля, а не конкретной детали реализации.

1 голос
/ 19 января 2010

Это из Windows API.

Я помню это так.

Это P -интернет на W -идеальную строку.

Он будет использоваться в приложении Unicode. Его использование будет, когда вы звоните в Windows. Наилучшим типом будет на самом деле LPTSTR P -интернет на строку типа T (Unicode или ANSI.

0 голосов
/ 19 января 2010

Взгляните на файл WinNT.h в Windows SDK - вы увидите, что PWSTR является typedef для WCHAR *. Это не макрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...