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을 요구합니다. 도와주세요.
LPCWSTR
"Long Pointer to Constant Wide String"을 의미합니다. W는 Wide를 나타내며 문자열이 일반 문자와 비교하여 2 바이트 문자로 저장됨을 의미합니다 char
. 비 ASCII 전용 문자열을 처리해야하는 모든 C / C ++ 코드에 공통입니다.
에 할당 할 일반 C 리터럴 문자열을 얻으려면 LPCWSTR
L 접두사를 사용해야합니다.
LPCWSTR a = L"TestWindow";
LPCWSTR
와 동일합니다 wchar_t const *
. 함수 호출에 의해 수정되지 않는 넓은 문자열에 대한 포인터입니다.
LPCWSTR
문자열 리터럴에 L을 추가 하여 s에 할당 할 수 있습니다 .LPCWSTR *myStr = L"Hello World";
LPC T STR 및 기타 T 유형은 프로젝트의 유니 코드 설정에 따라 문자열 유형을 취합니다. _UNICODE
프로젝트에 대해 정의 된 경우 T 유형의 사용은 와이드 문자 형식과 동일하고 그렇지 않으면 Ansi 형식입니다. 적절한 기능은이 방법으로 호출됩니다 : FindWindowEx
로 정의 FindWindowExA
또는 FindWindowExW
이 정의에 따라 달라집니다.
이것은 일정한 넓은 문자열 (즉, 넓은 문자의 문자열)에 대한 긴 포인터입니다.
그것은 넓은 문자열이기 때문에 상수를 다음과 같이 만들고 싶습니다 L"TestWindow"
. 중간도 생성하지 않고 매개 변수를 a
전달 L"TestWindow"
합니다.
ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
pedantically 정확하고 싶다면 "LPCTSTR"은 "텍스트"문자열입니다. 유니 코드 빌드에서는 넓은 문자열이고 ANSI 빌드에서는 좁은 문자열이므로 적절한 매크로를 사용해야합니다.
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
하지만 유니 코드와 ANSI 문자 집합 모두에 대해 컴파일 할 수있는 코드를 생성하는 데 관심이있는 사람은 거의 없으며 제대로 작동하지 않으면 약간의 이득을 위해 상당한 추가 작업이 필요할 수 있습니다. 이 특별한 경우에는 추가 작업이 많지 않지만 문자열을 조작하는 경우 올바른 함수로 확인되는 전체 문자열 조작 매크로 집합이 있습니다.
'Program Tip' 카테고리의 다른 글
배치 파일을 통해 cmd 명령을 어떻게 실행합니까? (0) | 2020.10.14 |
---|---|
Homebrew 용 Github API 토큰 설정 (0) | 2020.10.14 |
classList가있는 코드가 IE에서 작동하지 않습니까? (0) | 2020.10.14 |
HTMLCollection, NodeLists 및 객체 배열의 차이점 (0) | 2020.10.14 |
C에서 exit ()를 사용해야합니까? (0) | 2020.10.14 |