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

标签 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
}

这来自一个示例,但是我现在遇到了错误

error C2664: 'auxDIBImageLoadW' : cannot convert parameter 1 from 'char *' to 'LPCWSTR'

我该如何纠正这个问题?

最佳答案

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

这意味着在头文件的某处会有这样的#define

#define auxDIBImageLoad auxDIBImageLoadW

所以您实际上并不是在调用 auxDIBImageLoad(没有具有该名称的函数),而是在调用 auxDIBImageLoadWauxDIBImageLoadW 需要一个 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/

相关文章:

c++ - 为什么无符号和有符号相减后符号不同?

c++ - 可能的内存泄漏?

c++ - 使用 GLEW 和 WGL 的 OpenGL 抗锯齿

c++ - 读取文件时缓冲区大小会影响时间成本吗?

c++ - 在比较中,GCC 似乎更喜欢小的即时值。有没有办法避免这种情况?

visual-c++ - 一家非常小的公司的代码/文档管理

c++ - 绕错误的轴旋转

c++ - 使用VBO绘制不同宽度的彩色线条?

c++ - 更新对象内的值不起作用

visual-c++ - 取消注册基于 com 的应用程序时,如何避免从注册表中删除共享 COM 接口(interface)条目?