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

时间:2011-03-30 00:32:28

标签: c++ visual-c++ opengl char bmp

我正在尝试加载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
}

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

  

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

我怎么能纠正这个?

5 个答案:

答案 0 :(得分:33)

您正在使用字符集设置为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(按此顺序)。 如果不破坏许多其他代码,更改项目设置可能没问题。 我会建议转换字符串,因为它是不必要的。直接调用auxDIBImageLoadA要容易得多,结果也一样。

答案 1 :(得分:10)

您有几个选择:

  • 将项目设置中的“字符集”选项从“Unicode”更改为“未设置”
  • 致电auxDIBImageLoadA而非auxDIBImageLoad
  • Filename的类型从char*更改为wchar_t*
  • 使用std::mbstowcs将文件名从char*转换为wchar_t*

答案 2 :(得分:1)

看起来你试图使用两个不同的字符集。 'char '是典型的ANSI,LPCWSTR是宽字符(即unicode)。如果您想使用char ,请将项目设置中的“字符集”属性更改为“无设置”。

答案 3 :(得分:1)

尝试以下方式使用 MultiByteToWideChar()

void main(int argc, char* argv[])
{
 ...
 wchar_t filename[4096] = {0};
 MultiByteToWideChar(0, 0, argv[1], strlen(argv[1]), filename, strlen(argv[1]));

 // RenderFile() requires LPCWSTR (or wchar_t*, respectively)
 hr = pGraph->RenderFile(filename, NULL);
 ...
}

答案 4 :(得分:0)

将字符数组转换为LPCWSTR。您可以在第2个帖子here

中看到这个