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

首先,到底是什么?我猜它是一个指针(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,所以无法工作。 I don't get it at all. 我想清楚地了解所有这些 LPCWSTR,LPCSTR,LPSTR。我试图找到一些东西,但是我变得更加困惑。在 msdn 站点上,FindWindowEx被声明为

HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);

所以最后一个参数是 LPCSTR,编译器对 LPCWSTR 有要求。 请帮帮我。

180726 次浏览

LPCWSTR代表“长指针到常量宽字符串”。W 代表宽,意味着字符串存储在一个2字节的字符与正常的 char相比。对于任何必须只处理非 ASCII 字符串的 C/C + + 代码来说都是通用的。=

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

LPCWSTR a = L"TestWindow";

它是一个指向常量宽字符串(即宽字符串)的长指针。

因为它是一个宽字符串,所以希望将常量设置为: L"TestWindow"。我也不会创建中间的 a,我只是为参数传递 L"TestWindow":

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

如果你想学术上正确,“ LPCTSTR”是一个“ text”字符串—— Unicode 构建中的宽字符串和 ANSI 构建中的窄字符串,所以你应该使用适当的宏:

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

但是,很少有人关心生成可以同时编译 Unicode 和 ANSI 字符集的代码,如果您不能让它真正正确地工作,那么可能会有相当多的额外工作,但收益甚微。在这种特殊情况下,没有太多额外的工作,但是如果您操作字符串,那么有一整套字符串操作宏可以解析为正确的函数。

LPCWSTR等于 wchar_t const *。它是一个指向不会被函数调用修改的宽字符串的指针。

可以通过将 L 前缀为字符串文字 LPCWSTR *myStr = L"Hello World";来赋值给 LPCWSTR

LPCTSTR 和任何其他 T类型,根据项目的 Unicode 设置采用字符串类型。如果为项目定义了 _UNICODE,则 T 类型的使用与宽字符形式相同,否则使用 Ansi 形式。适当的函数也可以这样调用: 根据这个定义,FindWindowEx被定义为 FindWindowExAFindWindowExW