首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >LPCWSTR代表什么?应该如何处理它?

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

Stack Overflow用户
提问于 2010-02-10 00:42:58
回答 2查看 163.3K关注 0票数 103

首先,它到底是什么?我猜它是一个指针(LPC表示长指针常量),但是"W“是什么意思呢?它是指向字符串的特定指针还是指向特定字符串的指针?例如,我想关闭一个名为"TestWindow“的窗口。

代码语言:javascript
复制
HWND g_hTest;
LPCWSTR a;
*a = ("TestWindow");
g_hTest = FindWindowEx(NULL, NULL, NULL, a);
DestroyWindow(g_hTest);

该代码是非法的,它不起作用,因为常量char6不能转换为常量WCHAR。我一点也不明白。我想对所有这些LPCWSTR,LPCSTR,LPSTR有一个清楚的了解。我试着去找一些东西,但是我更困惑了。在msdn站点,FindWindowEx声明为

代码语言:javascript
复制
HWND FindWindowEx(      
    HWND hwndParent,
    HWND hwndChildAfter,
    LPCTSTR lpszClass,
    LPCTSTR lpszWindow
);

所以最后一个参数是LPCSTR,编译器需要LPCWSTR。请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-10 00:45:41

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

要将普通的C文本字符串分配给LPCWSTR,需要为其加上前缀L

代码语言:javascript
复制
LPCWSTR a = L"TestWindow";
票数 148
EN

Stack Overflow用户

发布于 2010-02-10 00:49:39

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

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

代码语言:javascript
复制
ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");

如果您想要从理论上讲是正确的,那么"LPCTSTR“就是一个”文本“字符串--在Unicode构建中是一个宽字符串,在ANSI构建中是一个窄字符串,因此您应该使用适当的宏:

代码语言:javascript
复制
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2230758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档