C++ 在C+中使用DevIL和OpenGL加载图像+;
正如标题所示,我正在尝试使用DevIL加载图像,然后再将其传递给OpenGL。我使用这段代码作为错误控制C++ 在C+中使用DevIL和OpenGL加载图像+;,c++,opengl,image-processing,devil,C++,Opengl,Image Processing,Devil,正如标题所示,我正在尝试使用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
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 *'
error C2664: 'ilLoadImage' : cannot convert parameter 1 from 'const char *' to 'const wchar_t *'
如果我将filename
定义为const wchar\u t*filename
,我会得到错误
error C2664: 'ilLoadImage' : cannot convert parameter 1 from 'const char *' to 'const wchar_t *'
error C2664: 'ilLoadImage' : cannot convert parameter 1 from 'const char *' to 'const wchar_t *'
所以现在我不会让你厌烦我的好奇心,为什么[filename].bmp文件的类型是wchar\u t*,或者wchar\u t是什么,谷歌把我弄糊涂了,我只想问我必须做什么才能让它工作:为什么它不工作?我错过了什么?我相信,一定有一个非常简短的解决办法。看起来就是那种错误
谢谢。如果使用Visual Studio,请尝试将项目更改为使用多字节字符集。如果使用Unicode函数,则必须使用Unicode文本。具体而言,
L
将返回静态文本的宽字符表示:
ilLoadImage(L"back.bmp");
如果同时编译ANSI和wide字符串的代码,请改用\u T()
,它将返回正确类型的字符串:
ilLoadImage(_T("back.bmp"));
如果您处于后一种情况,并且不知道编译时需要什么类型的
char
,请使用TCHAR
,这是char
或WCHAR
,具体取决于是否定义了UNICODE
。消除了错误,但是现在我收到了大量的链接器错误,这些错误可能与我在项目中的混乱有关,也可能与我无关。除非我遗漏了什么,否则我所有的依赖项都是正常的,我的文件应该在哪里…没有意义…那么你应该打开另一个问题,详细错误。DevIL有两套库,一套兼容unicode,另一套不兼容。确保你用的是正确的。如果将项目设置为多字节,则使用unicode不兼容的项目