无法将const char *转换为LPCWSTR

时间:2014-09-24 04:40:12

标签: qt char lpcwstr

我在QT编译器中遇到错误但是它与VS2010一起工作正常。错误说明了这一点 我见过其他与同一错误有关的帖子,但是在QT中我没有解决我的问题。我已经尝试了_T,L或TEXT但仍然无法正常工作

  

BQ。错误:C2664:'处理   LoadImageW(HINSTANCE,LPCWSTR,UINT,int,int,UINT)':无法转换   参数2从'const char *'到'LPCWSTR'指出的类型是   无关;转换需要reinterpret_cast,C风格的转换或   功能式演员

我的代码如下

Bitmap::Bitmap(std::string const& file_name) {
bitmap_ = static_cast<HBITMAP>(::LoadImage(0, file_name.c_str(), IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION));
}

如果您有任何想法可以解决此问题,请分享

2 个答案:

答案 0 :(得分:3)

Qt不包含编译器。在Windows上,您可能正在使用mingw或Visual C ++进行编译。无论哪种方式,问题在于您正在调用一个需要宽字符串的函数,但是您尝试将其设置为8位字符串。

出于兼容性原因,Win32 uses a different set of API functions if you have _UNICODE defined。在您的情况下,您确实已定义_UNICODE。您可以继续使用8位std :: string,但只需从LoadImage() to LoadImageA()更改方法即可。或者,如果您不介意更改Bitmap类,可以从std :: string切换到std :: wstring以利用Windows&#39; Unicode功能。

但也许更大的问题是,如果您使用Qt,为什么要使用Win32加载位图和std :: string? Qt的QImage classQString class提供了功能齐全的跨平台字符串和图像加载器。与任何综合框架一样,如果您只根据需要使用外部功能,Qt效果最佳。

答案 1 :(得分:0)

我不确定这种方法是否最好,但我已在我的项目中使用它们并且工作正常,请参阅:

char *source = "Hello world";
WCHAR target[size];
MultiByteToWideChar(CP_ACP, 0, source, -1, target, size);
LPCWSTR final = target;

MessageBox(0, final, TEXT("title"), 0); //Sample usage