无法将cont-char*转换为LPCWSTR



我在QT编译器中遇到了一个错误,但它在VS2010中运行良好。错误指出我看到了其他与相同错误相关的帖子,但非解决了我在QT中的问题。我尝试过_T、L或TEXT,但仍然无法使用

bq。错误:C2664:'句柄LoadImageW(HINSTANCE,LPCWSTR,UINT,int,int,UINT)":无法转换从"const char*"到"LPCWSTR"的参数2指向的类型为无关;转换需要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));
}

如果您有任何解决的想法,请分享

Qt不包括编译器。在Windows上,您可能正在使用mingw或Visual C++进行编译。无论哪种方式,问题都是您调用的函数需要一个宽字符串,但您却试图将一个8位字符串交给它。

出于兼容性原因,如果定义了_UNICODE,Win32将使用一组不同的API函数。在您的情况下,您确实定义了_UNICODE。您可以继续使用8位std::字符串,但只需将方法从LoadImage()更改为LoadImageA()即可。或者,如果您不介意更改Bitmap类,您可以从std::string切换到std::wstring,以利用Windows的Unicode功能。

但也许更大的问题是,如果使用Qt,为什么要使用Win32来加载位图和std::string?Qt的QImage类和QString类提供了一个功能齐全的跨平台字符串和图像加载器。与任何全面的框架一样,如果您只在需要的基础上使用外部功能,Qt的效果最好。

我不确定这个方法是否是最好的,但我已经在我的项目中使用了它们,它运行良好,请参阅:

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

最新更新