109

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

4

3 回答 3

154

LPCWSTR代表“指向恒定宽字符串的长指针”。W 代表 Wide,表示字符串存储在 2 字节字符中,而不是普通的char. 对于必须处理非 ASCII 字符串的任何 C/C++ 代码都很常见。=

要获得一个普通的 C 文字字符串来分配给 a LPCWSTR,您需要在它前面加上 L

LPCWSTR a = L"TestWindow";
于 2010-02-09T16:45:41.067 回答
14

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

LPCWSTR您可以通过在字符串文字前加上 L 来分配给s:LPCWSTR *myStr = L"Hello World";

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

于 2010-02-09T17:00:30.393 回答
7

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

由于它是一个宽字符串,你想让你的常量看起来像:L"TestWindow". 我也不会创建中间体a,我只是传递L"TestWindow"参数:

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

如果你想学究式地正确,“LPCTSTR”是一个“文本”字符串——Unicode 版本中的宽字符串和 ANSI 版本中的窄字符串,所以你应该使用适当的宏:

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

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

于 2010-02-09T16:49:39.147 回答