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来分配给LPCWSTRLPCWSTR *myStr = L"Hello World";

LPC T STR和任何其他Ttypes,根据您的项目的Unicode设置采取stringtypes。 如果为你的项目定义了_UNICODE ,Ttypes的使用与宽字符forms相同,否则使用Ansiforms。 相应的函数也会这样调用:根据这个定义, FindWindowEx被定义为FindWindowExA或者FindWindowExW