MessageBox(NULL,Temp,"Application Error",MB_ICONSTOP);
时出现以下错误:
error C2664: “MessageBoxW”: 不能将参数 2 从“char *”转换为“LPCWSTR”
其中定义:
char* Temp=new char[200];
请问怎么改啊?
3 个解决方案
#1
MessageBox(NULL,Temp,"Application Error",MB_ICONSTOP);
改为
MessageBoxA(NULL,Temp,"Application Error",MB_ICONSTOP);
改为
MessageBoxA(NULL,Temp,"Application Error",MB_ICONSTOP);
#2
因为你的程序在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);
如果你的程序在 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);
#3
谢谢大家!
#1
MessageBox(NULL,Temp,"Application Error",MB_ICONSTOP);
改为
MessageBoxA(NULL,Temp,"Application Error",MB_ICONSTOP);
改为
MessageBoxA(NULL,Temp,"Application Error",MB_ICONSTOP);
#2
因为你的程序在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);
如果你的程序在 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);
#3
谢谢大家!