C++ 错误C2664:&x27;auxDIBImageLoadW';:无法将参数1从';LPSTR&x27;至';LPCWSTR';

C++ 错误C2664:&x27;auxDIBImageLoadW';:无法将参数1从';LPSTR&x27;至';LPCWSTR';,c++,opengl,visual-studio-2012,C++,Opengl,Visual Studio 2012,在重新安装windows和VS 2012 Ultimate之后,我刚刚修改了代码。代码(如下所示)以前运行得非常好,但当我现在尝试运行代码时,它会出现以下错误: Error 1 error C2664: 'auxDIBImageLoadW' : cannot convert parameter 1 from 'LPSTR' to 'LPCWSTR' 代码: 你能帮我吗?将“LPSTR strFileName”更改为“LPCWSTR strFileName”,“building1.b

在重新安装windows和VS 2012 Ultimate之后,我刚刚修改了代码。代码(如下所示)以前运行得非常好,但当我现在尝试运行代码时,它会出现以下错误:

Error   1   error C2664: 'auxDIBImageLoadW' : cannot convert parameter 1 from 'LPSTR' to 'LPCWSTR'  
代码:

你能帮我吗?

将“LPSTR strFileName”更改为“LPCWSTR strFileName”,“building1.bmp”更改为L“building1.bmp”,将“clock.bmp”更改为L“clock.bmp”


始终要小心,因为LPSTR是ASCII,而LPCWSTR是Unicode。因此,如果函数需要Unicode变量(如:L“String here”),则不能为其指定ASCII字符串。

解决方案如下:

将函数原型更改为宽字符串:

void CreateTexture(GLuint textureArray[], LPWSTR strFileName, int textureID)
//...
LPCWSTR k =L"grass.bmp";
CreateTexture(g_Texture, L"building1.bmp", 0);
CreateTexture(g_Texture, L"clock.bmp", 0);
pBitmap = auxDIBImageLoadA(strFileName);  

不要更改函数原型,而是调用API函数的
A
版本:

void CreateTexture(GLuint textureArray[], LPWSTR strFileName, int textureID)
//...
LPCWSTR k =L"grass.bmp";
CreateTexture(g_Texture, L"building1.bmp", 0);
CreateTexture(g_Texture, L"clock.bmp", 0);
pBitmap = auxDIBImageLoadA(strFileName);  


建议:坚持使用宽字符串并使用正确的字符串类型。

为什么要将窄字符串传递到宽函数中?