2011-04-20 98 views
2

正如标题所暗示的,我试图在使用DevIL将图像传递给OpenGL之前加载图像。我使用这段代码差错控制在C++中使用DevIL和OpenGL加载图像

const char* filename = "back.bmp"; 

if (!ilLoadImage(filename)) 
{ 
    throw runtime_error(std::string("Unable to load image") +filename); 
} 

其中,对if语句,返回错误

error C2664: 'ilLoadImage' : cannot convert parameter 1 from 'const char *' to 'const wchar_t *' 

如果我定义filenameconst wchar_t* filename,我得到的错误

error C2664: 'ilLoadImage' : cannot convert parameter 1 from 'const char *' to 'const wchar_t *' 

因此,现在我不会因为我对[文件名] .bmp文件的类型为wchar_t *或wchar_t是什么的好奇而厌倦您,Google会让我困惑,我只会问wha我必须让它工作:为什么它不起作用?我错过了什么?我相信肯定会有一个很短的解决方案。它看起来就像那种错误。

谢谢。

回答

4

如果您使用Unicode功能,则必须使用Unicode文本。具体来说,L将返回静态文本的宽字符表示:

ilLoadImage(L"back.bmp"); 

如果你对ANSI和宽字符串编译代码,使用_T()相反,它返回正确的字符串类型:

ilLoadImage(_T("back.bmp")); 

如果您处于后一种情况,并且不知道在编译时需要使用哪种类型的char,请使用TCHAR,它可以是CHARWCHAR,具体取决于是否定义了UNICODE

0

如果您使用Visual Studio,请尝试更改项目以使用多字节字符集。

+0

这摆脱了错误,但现在我得到了大量的链接器错误,可能会或可能不会有关于我与项目混乱的事情。除非我错过了一些东西,我所有的依赖关系都没问题,我的文件应该是......没有意义...... – OddCore 2011-04-21 09:16:25

+1

然后,你应该打开另一个问题,详细错误。 DevIL有两套库,一套是unicode兼容的,一套不是。确保你使用正确的。如果将项目设置为多字节,则使用unicode不兼容的项目 – Dikei 2011-04-21 10:09:01