Что означает 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. Я пытался найти что-то, однако я запутался еще больше. На сайте msdn FindWindowEx объявлен
HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
таким образом, последний параметр-LPCSTR, и компилятор требует LPCWSTR.
Пожалуйста помочь.
3 ответов:
LPCWSTRозначает "длинный указатель на постоянную строку". W обозначает Wide и означает, что строка хранится в 2-байтовом символе против обычногоchar. Общий для любого кода C/C++, который должен иметь дело только со строками, отличными от ASCII.=чтобы получить нормальную строку литерала C для назначения a
LPCWSTR, вы должны префикс его с LLPCWSTR a = L"TestWindow";
LPCWSTRэквивалентноwchar_t const *. Это указатель на широкую символьную строку, которая не будет изменена вызовом функции.вы можете назначить
LPCWSTRs путем добавления L к строковому литералу:LPCWSTR *myStr = L"Hello World";модельTSTR и любой другой T типы, возьмите строковый тип в зависимости от настроек Unicode для вашего проекта. Если
_UNICODEопределяется для вашего проекта, использование типов T совпадает с широкими символьными формами, в противном случае Анси формирует. Соответствующая функция также будет вызвана следующим образом: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, и если вы не получаете его для правильной работы, это может быть довольно много дополнительной работы для небольшой выгоды. В этом конкретном случае не так много дополнительной работы, но если вы управляете строками, есть целый набор макросов управления строками, которые разрешают правильные функции.
Comments