What does LPCWSTR stand for and how should it be handled with?

后端 未结 3 1400
醉话见心
醉话见心 2020-11-29 18:47

First of all, what is it exactly? I guess it is a pointer (LPC means long pointer constant), but what does \"W\" mean? Is it a specific pointer to a string or a pointer to a

相关标签:
3条回答
  • 2020-11-29 18:59

    It's a long pointer to a constant, wide string (i.e. a string of wide characters).

    Since it's a wide string, you want to make your constant look like: L"TestWindow". I wouldn't create the intermediate a either, I'd just pass L"TestWindow" for the parameter:

    ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
    

    If you want to be pedantically correct, an "LPCTSTR" is a "text" string -- a wide string in a Unicode build and a narrow string in an ANSI build, so you should use the appropriate macro:

    ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
    

    Few people care about producing code that can compile for both Unicode and ANSI character sets though, and if you don't getting it to really work correctly can be quite a bit of extra work for little gain. In this particular case, there's not much extra work, but if you're manipulating strings, there's a whole set of string manipulation macros that resolve to the correct functions.

    0 讨论(0)
  • 2020-11-29 19:03

    LPCWSTR stands for "Long Pointer to Constant Wide String". The W stands for Wide and means that the string is stored in a 2 byte character vs. the normal char. Common for any C/C++ code that has to deal with non-ASCII only strings.=

    To get a normal C literal string to assign to a LPCWSTR, you need to prefix it with L

    LPCWSTR a = L"TestWindow";
    
    0 讨论(0)
  • 2020-11-29 19:12

    LPCWSTR is equivalent to wchar_t const *. It's a pointer to a wide character string that won't be modified by the function call.

    You can assign to LPCWSTRs by prepending a L to a string literal: LPCWSTR *myStr = L"Hello World";

    LPCTSTR and any other T types, take a string type depending on the Unicode settings for your project. If _UNICODE is defined for your project, the use of T types is the same as the wide character forms, otherwise the Ansi forms. The appropriate function will also be called this way: FindWindowEx is defined as FindWindowExA or FindWindowExW depending on this definition.

    0 讨论(0)
提交回复
热议问题