我正在尝试加载 BMP 文件
AUX_RGBImageRec *LoadBMP(char *Filename) // Loads A Bitmap Image
{
FILE *File=NULL; // File Handle
if (!Filename) // Make Sure A Filename Was Given
{
return NULL; // If Not Return NULL
}
File=fopen(Filename,"r"); // Check To See If The File Exists
if (File) // Does The File Exist?
{
fclose(File); // Close The Handle
return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer
}
return NULL; // If Load Failed Return NULL
}
这来自一个示例,但是我现在遇到了错误
error C2664: 'auxDIBImageLoadW' : cannot convert parameter 1 from 'char *' to 'LPCWSTR'
我该如何纠正这个问题?
最佳答案
您正在编译您的应用程序,并将字符集设置为 UNICODE(项目设置 -> 配置选项 -> 常规)。 Windows 头文件使用 #defines 将函数名称“映射”到 nameA(对于多字节字符串)或 nameW(对于 unicode 字符串)。
这意味着在头文件的某处会有这样的#define
#define auxDIBImageLoad auxDIBImageLoadW
所以您实际上并不是在调用 auxDIBImageLoad
(没有具有该名称的函数),而是在调用 auxDIBImageLoadW
。 auxDIBImageLoadW
需要一个 unicode 字符串 (wchar_t const*
)。您正在传递一个多字节字符串 (char const*
)。
您可以执行以下操作之一
- 将您的项目更改为使用多字节字符集(-> 项目设置)
- 通过将
auxDIBImageLoad
替换为auxDIBImageLoadA
显式调用函数的多字节版本
- 更改您的
LoadBMP
函数以接受 unicode 字符串本身 - 在
LoadBMP
中将字符串转换为unicode
我建议更改 LoadBMP
以接受 unicode 字符串本身或直接调用 auxDIBImageLoadA
(按此顺序)。
如果不破坏很多其他代码,更改项目设置可能没问题。
我会 not 建议转换字符串,因为它是不必要的。直接调用auxDIBImageLoadA
要容易得多,结果也是一样的。
关于c++ - 无法将参数 1 从 'char *' 转换为 'LPCWSTR',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5480588/