帮我看下这代码,搞好久了,不知道char*要怎样转成LPCWSTR

axing0308008341 2008-02-29 02:30:41
帮我看下这代码,搞好久了,不知道char*要怎样转成LPCWSTR
//auxDIBImageLoad(Filename);这函数要的是个LPCWSTR类型,怎么转换,
//强制转的话是乱码,char*指向8位的ANSI字符串,LPCWSTR指向16位的Unicode字符串
AUX_RGBImageRec *LoadBMP(char * Filename) // 载入位图图象
{
FILE *File=NULL; // 文件句柄
if (!Filename) // 确保文件名已提供
{
return NULL; // 如果没提供,返回 NULL
}
File=fopen(Filename,"r"); // 尝试打开文件
if (File) // 文件存在么?
{
fclose(File); // 关闭句柄
return auxDIBImageLoad(Filename);//(LPCWSTR)Filename); // 载入位图并返回指针
}
return NULL; // 如果载入失败,返回 NULL
}
在线等,好心人帮帮我
...全文
1313 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪域迷影 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
我也碰到过这个问题..最后发现在新建工程时把使用VC2005,Unicode编码这个不要就可以运行通过了!不知道是系统字库问题还是什么问题!
[/Quote]呵呵,这个问题也纠结了我很久,将VC6.0中的项目直接粘贴到VC2005中(不是通过版本转换)的话,经常会出现类似error c2664:"MessageBoxW":不能将参数2从“const char[15]”转换为“LPCWSTR”与指向的类型无关。这样的错误。

我的解决办法是:
项目菜单->最后的属性->配置属性->常规->项目默认值->unicode改为未设置。
这个貌似是ACSII码与UNICODE编码转换的问题,char占1个字节,采用ASCII编码;而LPCWSTR、
TCHAR采用UNICODE编码,需要转换。
sugenbill 2008-03-22
  • 打赏
  • 举报
回复
我也碰到过这个问题..最后发现在新建工程时把使用VC2005,Unicode编码这个不要就可以运行通过了!不知道是系统字库问题还是什么问题!
WZ19860913 2008-03-08
  • 打赏
  • 举报
回复
可以不用fopen啊,用API函数,比如CreateFile。
axing0308008341 2008-03-05
  • 打赏
  • 举报
回复
楼上的_T("minox.bmp")是可以,不过File=fopen(Filename,"r"); // 尝试打开文件
fopen又要用到char*类型,还是得转回来.
我那天先用的傻B办法,带两个参数,一个LPCWSTR,一个Char *,无语了
改天得好好研究下这些字符编码,我没什么分,不知道怎么给分.总之谢谢
我再试试下别的办法.先结贴了算了
  • 打赏
  • 举报
回复
现调用setlocal
然后就可以用
mbstowcs
wcstombs
拉达曼迪斯II 2008-03-04
  • 打赏
  • 举报
回复
原来是我打错了。
应该是
include Atlconv.h
文件。
axing0308008341 2008-03-04
  • 打赏
  • 举报
回复
如果能反向转的也可以解决我的问题.就是把LPCWSTR转成char *
我都想知道要怎么转..
axing0308008341 2008-03-04
  • 打赏
  • 举报
回复
我结果先贴出来,再看看
error C2664: 'MultiByteToWideChar' : cannot convert parameter 3 from 'ATL::CString' to 'LPCSTR'
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
error C2664: 'MultiByteToWideChar' : cannot convert parameter 3 from 'ATL::CString' to 'LPCSTR'
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
: error C3861: 'SAFE_DELETEGROUP': identifier not found
: warning C4244: 'return' : conversion from 'WPARAM' to 'int', possible loss of data
WZ19860913 2008-03-04
  • 打赏
  • 举报
回复
不好意思,应该是_T("minox.bmp")
WZ19860913 2008-03-04
  • 打赏
  • 举报
回复
"minox.bmp"改为:_L"minox.bmp",不知道要不要加括号变成_L("minox.bmp"),忘记了,都试试吧。
bluetooth_2001 2008-03-04
  • 打赏
  • 举报
回复
#include <windows.h>
#include <atlstr.h>
#define STRSAFE_NO_DEPRECATE
#include <strsafe.h> // for String... functions
#include <crtdbg.h> // 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();
axing0308008341 2008-02-29
  • 打赏
  • 举报
回复
谢谢!
可是没有这个头文件..Cannot open include file: 'AltConv.h': No such file or directory
我的是win32程序...跟这有没有关系..
拉达曼迪斯II 2008-02-29
  • 打赏
  • 举报
回复
#include "AltConv.h"
axing0308008341 2008-02-29
  • 打赏
  • 举报
回复
error C3861: 'CA2CT': identifier not found???
拉达曼迪斯II 2008-02-29
  • 打赏
  • 举报
回复
LPCTSTR tcstr= CA2CT("this is a test");
axing0308008341 2008-02-29
  • 打赏
  • 举报
回复
我用的是VC2005,Unicode编码,调用这个函数的是
if (TextureImage[0]=LoadBMP("minox.bmp"))

7,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧