Прежде всего, что это такое? Я предполагаю, что это указатель (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. Пожалуйста помоги.
Ответы:
LPCWSTR
означает «длинный указатель на постоянную широкую строку». W обозначает широкий и означает, что строка хранится в виде 2-байтового символа, а не обычногоchar
. Общее для любого кода C / C ++, который имеет дело со строками, отличными от ASCII. =Чтобы получить обычную буквальную строку C для присвоения a
LPCWSTR
, вам нужно добавить к ней префикс LLPCWSTR a = L"TestWindow";
источник
SPCWSTR
.36UL
в C # это то же самое, что(ulong)36
(ulong - 64-битное целое число без знака).@
может использоваться на том же языке в качестве префикса для строк, немного изменяя способ их анализа.LPCWSTR
эквивалентноwchar_t const *
. Это указатель на строку широких символов, которая не будет изменена при вызове функции.Вы можете присвоить
LPCWSTR
s, добавив 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, и если вы не добьетесь того, чтобы он действительно работал правильно, это может быть довольно большой дополнительной работой с небольшой прибылью. В этом конкретном случае дополнительной работы не так уж и много, но если вы манипулируете строками, есть целый набор макросов манипулирования строками, которые разрешают правильные функции.
источник