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

推荐订阅源

GbyAI
GbyAI
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
博客园 - 【当耐特】
D
Docker
Y
Y Combinator Blog
L
LangChain Blog
博客园 - 三生石上(FineUI控件)
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
B
Blog
The GitHub Blog
The GitHub Blog
腾讯CDC
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
爱范儿
爱范儿
A
About on SuperTechFans
量子位
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

博客园 - amey

不错的blog 系统内置的图片资源---android.R.drawable android 开发不容错过的网站 Android风格与主题(style and theme) Android中的长度单位详解 startActivity 出错 main cannot be resolved or is not a field Android DDMS如何使用? 网上绝无仅有的Log分析教程及例子(转) 如何控制Android不锁屏 Android系统名词解释汇总 - Android讨论区::91手机论坛-91手机娱乐门户 Android开发中的drawable-(hdpi,mdpi,ldpi)和WVGA,HVGA,QVGA的区别以及联系 每一位想有所成就的程序员都必须知道的15件事(转载) MSDN一篇很好的WCF入门教程(转) GetManifestResourceStream的使用 使用Refactor找回被覆盖的代码 第一次制作.hlp文件格式的帮助文档 windows应用程序名要与配置文件命名一致 如何控制静态Form类与普通的Form类之间的切换
[windows编程]error C2664: “MessageBoxW”: 不能将参数 2 从“...
amey · 2010-12-26 · via 博客园 - amey

执行
MessageBox(NULL,Temp,"Application Error",MB_ICONSTOP);
时出现以下错误:
error C2664: “MessageBoxW”: 不能将参数 2 从“char *”转换为“LPCWSTR”
其中定义:
char* Temp=new char[200];
请问怎么改啊?

因为你的程序在UNICODE(宽字节)字符集下运行,如果调用了 MessageBox ,实际上调用的是 MessageBoxW 函数;
如果你的程序在 ANSI 字符集运行,调用 MessageBox ,就相当于调用 MessageBoxA;
其中 MessageBoxW 支持 UNICODE;
MessageBoxA 支持ANSI;

UNICODE与ANSI 有什么区别呢?简单的说,UNICODE版的字符比ANSI 的内存占用大,比如:
Win32程式中出现的标准定义 char 占一个字节,
而 char 的UNICODE版被定义成这样:
typedef unsigned short wchar_t ;占2个字节。

所以有字符做参数的函数相应也用两个版本了。

宽字节版函数中带有字符参数的都应该用宽字节版的字符参数,将字符串转换成宽字节很容易:
比如将 "Application Error" 转换成UNICODE版,只需在它前面使用一个定义了的宏,如下:
L"Application Error" ,或者TEXT("Application Error" )都可以

所以你应将 MessageBox(NULL,Temp,"Application Error",MB_ICONSTOP); 改为:
MessageBox(NULL,Temp,L"Application Error",MB_ICONSTOP);