无法将参数1从'char*'转换为'LPCWSTR'

dac*_*ctz 17 c++ opengl char bmp visual-c++

我试图加载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
}
Run Code Online (Sandbox Code Playgroud)

这来自一个例子,但我现在得到错误

错误C2664:'auxDIBImageLoadW':无法将参数1从'char*'转换为'LPCWSTR'

我怎么能纠正这个?

Pau*_*oke 33

您正在使用字符集设置为UNICODE(项目设置 - >配置选项 - >常规)编译应用程序.Windows头文件使用#defines将函数名"映射"到nameA(对于多字节字符串)或nameW(对于unicode字符串).

这意味着在头文件中的某个地方会有像这样的#define

#define auxDIBImageLoad auxDIBImageLoadW
Run Code Online (Sandbox Code Playgroud)

所以你实际上并没有打电话auxDIBImageLoad(没有那个名字的功能),你正在打电话auxDIBImageLoadW.并auxDIBImageLoadW期望一个unicode字符串(wchar_t const*).您正在传递一个多字节字符串(char const*).

您可以执行以下操作之一

  • 更改项目以使用多字节字符集( - >项目设置)
  • 通过替换auxDIBImageLoad为显式调用函数的多字节版本auxDIBImageLoadA
  • 更改您的LoadBMP函数以接受unicode字符串本身
  • 将字符串转换为unicode LoadBMP

我建议更改LoadBMP为接受unicode字符串本身或auxDIBImageLoadA直接调用(按此顺序).如果不破坏许多其他代码,更改项目设置可能没问题.我建议转换字符串,因为它是不必要的.auxDIBImageLoadA直接呼叫要容易得多,结果也一样.


ild*_*arn 10

你有几个选择:

  • 将项目设置中的"字符集"选项从"Unicode"更改为"未设置"
  • 打电话auxDIBImageLoadA而不是auxDIBImageLoad
  • 改变Filename类型char*wchar_t*
  • 使用std::mbstowcs到文件名从转换char*wchar_t*