无法从“char *”转换参数 1至“LPCWSTR”

发布于 2024-10-28 02:05:36 字数 839 浏览 3 评论 0原文

我试图加载一个

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
}

来自示例的 BMP 文件,但是我现在收到错误

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

我该如何更正此问题?

Im trying to load a BMP file

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
}

this has come from an example however i'm now getting the error

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

how could I correct this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

痴骨ら 2024-11-04 02:05:36

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

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

#define auxDIBImageLoad auxDIBImageLoadW

所以你实际上并没有调用auxDIBImageLoad(没有具有该名称的函数),你正在调用auxDIBImageLoadW代码>.并且 auxDIBImageLoadW 需要一个 unicode 字符串 (wchar_t const*)。您正在传递一个多字节字符串 (char const*)。

您可以执行以下操作之一

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

我建议将 LoadBMP 更改为接受unicode 字符串本身或直接调用 auxDIBImageLoadA(按该顺序)。
如果不破坏很多其他代码,更改项目设置可能没问题。
不过,我建议转换字符串,因为这是不必要的。直接调用 auxDIBImageLoadA 要容易得多,而且结果是一样的。

You're compiling your application with Character-Set set to UNICODE (Project Settings -> Configuration Options -> General). Windows header files use #defines to "map" function names to either nameA (for multi-byte strings) or nameW (for unicode strings).

That means somewhere in a header file there will be a #define like this

#define auxDIBImageLoad auxDIBImageLoadW

So you're not actually calling auxDIBImageLoad (there is no function with that name), you're calling auxDIBImageLoadW. And auxDIBImageLoadW expects a unicode string (wchar_t const*). You're passing a multi-byte string (char const*).

You can do one of the following

  • change your project to use multi-byte character set (-> project settings)
  • explicitly call the multi-byte version of the function by replacing auxDIBImageLoad with auxDIBImageLoadA
  • change your LoadBMP function to accept a unicode string itself
  • convert the string to unicode inside LoadBMP

I'd recommend either changing LoadBMP to accept a unicode string itself or calling auxDIBImageLoadA directly (in that order).
Changing the project settings might be OK if it doesn't break a lot of other code.
I would not suggest converting the string though, since it's unnecessary. Calling auxDIBImageLoadA directly is far easier, and the result is the same.

差↓一点笑了 2024-11-04 02:05:36

您有几个选择:

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

You have a few options:

  • Change the 'character set' option in your project settings from 'Unicode' to 'Not Set'
  • Call auxDIBImageLoadA instead of auxDIBImageLoad
  • Change Filename's type from char* to wchar_t*
  • Use std::mbstowcs to convert Filename from a char* to a wchar_t*
烟酒忠诚 2024-11-04 02:05:36

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

Looks like your trying to use two different character sets. 'char ' is the typical ANSI and LPCWSTR is the wide character (i.e. unicode). If you would like to use char change the 'Character Set' property in your project setting to 'No Set'.

夏见 2024-11-04 02:05:36

尝试按以下方式使用 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);
 ...
}

Try using MultiByteToWideChar() the following way:

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);
 ...
}
不羁少年 2024-11-04 02:05:36

将字符数组转换为 LPCWSTR。您可以在此处的第二个人帖子中看到这一点

Convert the character array to a LPCWSTR. You can see this in the 2nd guys post here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文