Что означает LPCWSTR и как с ним следует обращаться?

Прежде всего, что это такое? Я предполагаю, что это указатель (LPC означает постоянную константу указателя), но что означает «W»? Является ли это конкретным указателем на строку или указатель на определенную строку? Например, я хочу закрыть окно с именем «TestWindow».

HWND g_hTest; LPCWSTR a; *a = ("TestWindow"); g_hTest = FindWindowEx(NULL, NULL, NULL, a); DestroyWindow(g_hTest); 

Код является незаконным и не работает, поскольку const char [6] не может быть преобразован в CONST WCHAR. Я этого не понимаю. Я хочу получить четкое представление обо всех этих LPCWSTR, LPCSTR, LPSTR. Я пытался найти что-то, но я еще больше смутился. На сайте FindWindowEx объявляется как

 HWND FindWindowEx( HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow ); 

Таким образом, последним параметром является LPCSTR, а компилятор требует LPCWSTR. Пожалуйста помоги.

LPCWSTR означает «Long Pointer to Constant Wide String». W означает Wide и означает, что строка хранится в двухбайтовом символе против обычного char . Общий для любого кода C / C ++, который должен обрабатывать только строки, отличные от ASCII. =

Чтобы получить стандартную LPCWSTR строку C для назначения LPCWSTR , вам необходимо префикс L

 LPCWSTR a = L"TestWindow"; 

LPCWSTR эквивалентен wchar_t const * . Это указатель на широкую строку символов, которая не будет изменена вызовом функции.

Вы можете назначить LPCWSTR s, LPCWSTR L в строковый литерал: LPCWSTR *myStr = L"Hello World";

LPC T STR и любые другие типы T , введите строковый тип в зависимости от настроек Unicode для вашего проекта. Если для вашего проекта определен _UNICODE , использование типов T совпадает с формами широкого символа, в противном случае формы Ansi. Соответствующая функция также будет называться так: FindWindowEx определяется как FindWindowExA или FindWindowExW зависимости от этого определения.

Это длинный указатель на константу, широкую строку (т.е. строку с широкими символами).

Поскольку это широкая строка, вы хотите сделать свой постоянный вид: L"TestWindow" . Я бы тоже не создал промежуточный a , я просто передал L"TestWindow" для параметра:

 ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow"); 

Если вы хотите быть педантично правильным, «LPCTSTR» представляет собой «текстовую» строку – широкую строку в сборке Unicode и узкую строку в сборке ANSI, поэтому вы должны использовать соответствующий макрос:

 ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow")); 

Немногие заботятся о создании кода, который может компилироваться как для наборов символов Unicode, так и для ANSI, хотя, и если вы не получите его на самом деле правильно, может быть довольно немного дополнительной работы для небольшого выигрыша. В этом конкретном случае не так много дополнительной работы, но если вы манипулируете строками, существует целый набор макросов строковых манипуляций, которые разрешают правильные функции.

  • Как загрузить PNG-образ с помощью Win32 / GDI (если нет GDI +)?
  • Как найти, если собственный DLL-файл скомпилирован как x64 или x86?
  • Как отправить штрихи клавиш в окно без необходимости его активации с помощью Windows API?
  • Хостинг внешнего приложения в окне WPF
  • Что такое __stdcall?
  • Как открыть встроенный диалог копирования файлов?
  • Использование глобальной клавиатуры (WH_KEYBOARD_LL) в WPF / C #
  • CreateProcess из буфера памяти
  • Vista / 7: Как получить цвет стекла?
  • CreateProcess не передает аргументы командной строки
  • Создание libcurl с поддержкой SSL в Windows
  • Давайте будем гением компьютера.