博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
移植性问题の[windows编程]error C2664: “MessageBoxW”: 不能将参数 2 从“char *”转......
阅读量:6951 次
发布时间:2019-06-27

本文共 842 字,大约阅读时间需要 2 分钟。

执行 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);

转载于:https://www.cnblogs.com/lzhitian/archive/2012/02/13/2348589.html

你可能感兴趣的文章
关于《半反去雾算法》一文的四宗罪。
查看>>
深度学习与计算机视觉系列(1)_基础介绍
查看>>
网站高并发解决方案参照http://www.toplee.com/blog/71.html
查看>>
grid++报表使用时注意事项
查看>>
【leetcode】Find Largest Value in Each Tree Row
查看>>
Android创建和使用数据库
查看>>
25、Python之禅
查看>>
YOLOv3的Darknet在OpenCV3.4.1(bug)下编译出错填坑
查看>>
有意义的命名
查看>>
POJ——3517
查看>>
POJ 2886
查看>>
shiro登录步骤源码分析
查看>>
Java进阶篇(二)——抽象类、内部类
查看>>
将Redis设置为后台启动
查看>>
为自己的博客园添加右侧目录
查看>>
TypeScript 学习二 表达式和循环
查看>>
CentOS 6.5安装部署Zabbix监控系统
查看>>
Sql server 2008 R2 导出/导入数据报错之无法打开全局共享内存以与性能 DLL 通信
查看>>
*#06# 新购手机 指令测试
查看>>
Microsoft Lookback Adapter添加并设置回环网卡(转)
查看>>