LPCWSTR代表什么,应该如何处理?

时间:2010-02-09 16:42:58

标签: c++ winapi lpcstr

首先,究竟是什么?我猜它是一个指针(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。 请帮忙。

3 个答案:

答案 0 :(得分:114)

LPCWSTR代表“指向常量宽字符串的长指针”。 W代表Wide,表示字符串以2字节字符存储,而不是普通char。任何必须处理非ASCII字符串的C / C ++代码的通用。=

要获得要分配给LPCWSTR的普通C字符串,您需要在其前面加上L

LPCWSTR a = L"TestWindow";

答案 1 :(得分:10)

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

您可以通过将L添加到字符串文字来指定LPCWSTRLPCWSTR *myStr = L"Hello World";

LPC T STR和任何其他 T 类型,根据项目的Unicode设置采用字符串类型。如果为您的项目定义了_UNICODE,则T类型的使用与宽字符形式相同,否则Ansi形式。相应的函数也将以这种方式调用:FindWindowEx定义为FindWindowExAFindWindowExW,具体取决于此定义。

答案 2 :(得分:6)

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

因为它是一个宽字符串,所以你想让它看起来像L"TestWindow"。我也不会创建中间a,我只是为参数传递L"TestWindow"

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

如果你想要迂腐正确,“LPCTSTR”是一个“文本”字符串 - Unicode构建中的宽字符串和ANSI构建中的窄字符串,所以你应该使用适当的宏:

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

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