Что означает 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.
Пожалуйста помочь.

3636   3  

3 ответов:

LPCWSTR означает "длинный указатель на постоянную строку". W обозначает Wide и означает, что строка хранится в 2-байтовом символе против обычного char. Общий для любого кода C/C++, который должен иметь дело только со строками, отличными от ASCII.=

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

LPCWSTR 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

    Ничего не найдено.