惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threatpost
Latest news
Latest news
N
News | PayPal Newsroom
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
TaoSecurity Blog
TaoSecurity Blog
The Last Watchdog
The Last Watchdog
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
T
Threat Research - Cisco Blogs
O
OpenAI News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Securelist
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
Cisco Talos Blog
Cisco Talos Blog
云风的 BLOG
云风的 BLOG
AWS News Blog
AWS News Blog
GbyAI
GbyAI
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
美团技术团队
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
S
Schneier on Security
博客园 - 聂微东
V2EX - 技术
V2EX - 技术
T
Troy Hunt's Blog
SecWiki News
SecWiki News
S
Secure Thoughts
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
腾讯CDC
H
Heimdal Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed

博客园 - Blaze

VC++常用数据类型及其操作详解[徐兆元] From VB.NET to C# and Back Again [By Darren Neimke and Scott Mitchell ] 请不要做浮躁的人(老文了,还是转一下,共勉) 地球上最慢的网路不在巴布里亚新几内亚和尼泊尔之间,而在中国网通和电信之间! [翻译]用TcpClient建立GPRS连接 1年零2个月零25天 我回来了 .NET的Pascal--Chrome来了! Gmail疯了?50个邀请! 检举个博客园的Bug! INI配置文件的替代品-XML配置文件的操作 INI的替代品--XML配置文件读取与保存 Wallop下蛋送邀请。 从WebService的SessionID说起 Gmail下蛋了 udp的奇怪问题 webservice对"小"规模数据传输的效率问题 运动会痛苦经历 n个VB.Net C#代码转换工具 关于时间的加减计算
eVC++就是eVC++啊 - Blaze - 博客园
Blaze · 2006-06-23 · via 博客园 - Blaze

在VC++6.0正常的一段代码:

void CMessageboxView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    MessageBox(
"LButtonDown");
    
// TODO: Add your message handler code here and/or call default
    CView::OnLButtonDown(nFlags, point);
}

在eVC++4.0中编译错误:

error C2664: 'MessageBoxW' : cannot convert parameter 1 from 'char [4]' to 'const unsigned short *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.

 于是进行显式类型转换,改为MessageBox((LPCTSTR)"LButtonDown");
成功地弹出了消息框,但是里面地文字是乱码.但是这段代码在VC++6.0中是完全正常的.
如图:

于是改用如下代码:

void CMessageboxView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    CString myStr
="LButtonDown";
    MessageBox((LPCTSTR)myStr);
    
// TODO: Add your message handler code here and/or call default
    CView::OnLButtonDown(nFlags, point);
}

乱码没有了:

问了一下wangxz,他说应该用MessageBox(_T("LBUTTONDOWN")); ,即加入一个_T宏,用来把ANSI字符串转换为 UniCode.因为Wince只支持UNICODE,因此调用API时要使用宽字符串。(LPCTSTR)"LBUTTONDOWN"中字符串本身仍然是ANSI字符串,前面加强制转换并没有解决问题。_T是在TCHAR.H中定义的一个宏,它会根据你编译环境中UNICODE宏的设置来确定是将后面的字符串编译成ANSI的还是UNICODE的
在VC下,由于PC上的Windows系统同时支持ANSI和UNICODE,所以可以用,但如果你在编译环境中定义了UNICODE宏,也会出现问题。
而定义一个CString中间变量的办法之所以可以用是因为CString重载了(LPCTSTR)这个强制转换运算符,这样就由CString完成了从ANSI字符串向UNICODE字符串的转换。