Program Tip

LPCWSTR은 무엇을 의미하며 어떻게 처리해야합니까?

programtip 2020. 10. 14. 20:51
반응형

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 리터럴 문자열을 얻으려면 LPCWSTRL 접두사를 사용해야합니다.

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 문자 집합 모두에 대해 컴파일 할 수있는 코드를 생성하는 데 관심이있는 사람은 거의 없으며 제대로 작동하지 않으면 약간의 이득을 위해 상당한 추가 작업이 필요할 수 있습니다. 이 특별한 경우에는 추가 작업이 많지 않지만 문자열을 조작하는 경우 올바른 함수로 확인되는 전체 문자열 조작 매크로 집합이 있습니다.

참고 URL : https://stackoverflow.com/questions/2230758/what-does-lpcwstr-stand-for-and-how-should-it-be-handled-with

반응형