LPCWSTR代表什么?应该如何处理?
首先,究竟是什么? 我想这是一个指针(LPC意味着长指针常量),但是“W”是什么意思? 它是一个特定的指针指向一个string或指向特定string的指针? 例如,我想closures一个名为“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。 我试图find一些东西,但是我更加困惑。 在MSDN站点FindWindowEx
被声明为
HWND FindWindowEx( HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow );
所以最后一个参数是LPCSTR,编译器要求LPCWSTR。 请帮忙。
LPCWSTR
代表“长指针到恒宽string”。 W代表Wide,表示string与正常char
存储在一个2字节的char
。 通常用于任何必须处理非ASCIIstring的C / C ++代码。=
为了得到一个正常的C文字string分配给LPCWSTR
,你需要用L作为前缀
LPCWSTR a = L"TestWindow";
这是一个长指针,指向一个常量,宽string(即一个宽string)。
因为它是一个很宽的string,所以你想让你的常量看起来像: L"TestWindow"
。 我不会创build中间a
一个,我只是通过L"TestWindow"
的参数:
ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
如果你想要正确的学习,一个“LPCTSTR”是一个“文本”string – 在Unicode编译中一个宽string和在ANSI编译中一个窄string,所以你应该使用适当的macros:
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
尽pipe如此,很less有人关心如何编写能够编译Unicode和ANSI字符集的代码,如果你不能真正正确地工作,可能会有很多额外的工作。 在这种特殊情况下,没有太多额外的工作,但是如果您操作string,则会有一整套string操作macrosparsing为正确的函数。
LPCWSTR
等同于wchar_t const *
。 这是一个宽字符的指针,不会被函数调用修改。
您可以通过在string文字前加L来分配给LPCWSTR
: LPCWSTR *myStr = L"Hello World";
LPC T STR和任何其他Ttypes,根据您的项目的Unicode设置采取stringtypes。 如果为你的项目定义了_UNICODE
,Ttypes的使用与宽字符forms相同,否则使用Ansiforms。 相应的函数也会这样调用:根据这个定义, FindWindowEx
被定义为FindWindowExA
或者FindWindowExW
。