VS2010中char与宽字符的问题
来源:互联网 发布:进销存数据库表设计 编辑:程序博客网 时间:2024/06/11 06:17
使用VS2010 提示错误 : error C2664: 'LoadImageW' : cannot convert parameter 2 from 'char [20]' to 'LPCWSTR'“char [20]”转换为“LPCWSTR”
LPCWSTR中的W是宽字符的意思,是UNICODE,就是说不是传统的char这种单字节字符,而是一个字符占两字节.
编译器把LoadImage解释成了LoadImageW,说明代码中某个地方定义了UNICODE开关,编译环境成了宽字节的,要把这个定义去掉.
Win32 API也分2中版本, MessageBoxA / MessageBoxW,,,MessageBox根据是否定义_UNICODE宏而定义到其中一个版本。
选择【项目菜单】->【最后的属性】->【配置属性】->【常规】->【项目默认值】->unicode改为未设置。
2,指定的Unicode字串常数,请加L“...”;例如:wchar_t *wfilename= L“HelloWorld”;
3,ansi字串(就是传统的char*)与wchar_t的*unicode的的字符串互转,请用MultiByteToWideChar与WideCharToMultiByte这两个API函数。
4,如果不太懂unicode的,那么就不要加UNICODE定义,用传统的方式来处理。
错误方法一:
wsprintf(buffer,L"WM_CHAR: Character = %c ",ascii_code);
TextOut(hdc, 0,0,(LPCWSTR)buffer, strlen(buffer));
这个只能显示第一个字母“W”
错误方法二:
sprintf((LPCWSTR)buffer,L"Key State = 0X%X ",key_state);
TextOut(hdc, 0,16,(LPCWSTR)buffer, strlen(buffer));
这个出现的是乱码!
错误方法三:
sprintf(buffer,L"Key State = 0X%X ",key_state);
TextOut(hdc, 0,16,buffer, strlen(buffer));
这个提示不能将char[80]转换成LPCWSTR
强制类型转换是不行的,因为一个是字符占一个字节,一个占两个字节,但是sprintf等函数是不知道的。
方法一:使用WideCharToMultiByte和 MultiByteToWideChar函数
代码如下:
#include
#include
#define STRSAFE_NO_DEPRECATE
#include // for String... functions
#include // for _ASSERTE
CStringW ConvertW(CString str, int sourceCodepage)
{
//int len=str.GetLength();
int unicodeLen=MultiByteToWideChar(sourceCodepage,0,str,-1,NULL,0) + 1;
wchar_t* pUnicode;
pUnicode=new wchar_t[unicodeLen];
memset(pUnicode,0,(unicodeLen)*sizeof(wchar_t));
MultiByteToWideChar(sourceCodepage, CP_ACP, str, -1, (LPWSTR)pUnicode, unicodeLen);
CStringW rt = pUnicode;
//delete pUnicode;
SAFE_DELETEGROUP( pUnicode );
return rt;
}
调用:
CStringW wszTemp = ConvertW( Filename, CP_ACP);
LPWSTR pwStr = wszTemp.GetBuffer();
- VS2010中char与宽字符的问题
- 解决VS2010中CString 转char*的问题
- VS2010中关于char[]转换成LPCWSTR的问题
- Windows编程菜鸟问题——宽字符与char型互相转换的问题
- 字节与字符及java中char与数据库中char的区别
- 关于LinuxC/C++中字符指针char * str 与字符数组 char str []的一点小区别
- VS2010中出现“const char*”类型的实参与“LPCWSTR”类型的形参不兼容,
- 关于char字符引发的一个问题
- 关于char字符的占位问题
- wchar与char字符转换的探究
- C++ 中 , char * 与 char [] 的区别
- VC中char* 与 char[]的区别
- VC中char* 与 char[]的区别
- c++中char与string之间的相互转换问题
- jni中jstring与char*转换的乱码问题
- c++ 中 char 与 string 之间的相互转换问题
- c语言中:字符 char的描述
- Java中char 字符类型的独特性
- iOS-创建单例模式
- Oracle 并行查询
- Codeforces Round #346 (Div. 2)--B. Qualifying Contest
- 对PipedOutputStream/PipedInputStream类的应用
- ZooKeeper原理及使用
- VS2010中char与宽字符的问题
- AutoLayout中的Content Hugging 和 Content Compression Resistance
- BZOJ 1996: [Hnoi2010]chorus 合唱队
- qrCode二维码的生成和识别
- Android获取本周本月本年的第一天和最后一天
- Webpack入门
- 玩,便是最好的教育
- GDB十分钟教程
- hibernate4+spring3.1整合常见问题解决方法