这里我正在解决在使用Glut-library时VS2013中发生的错误。正如我所见 - 这是指针和引用的一个简单问题。因此,第11行的输出是:
## error C2664: 'AUX_RGBImageRec *auxDIBImageLoadW(LPCWSTR)' : cannot convert argument 1 from 'char [13]' to 'LPCWSTR'
指向的类型是无关的;转换需要reinterpret_cast,C风格的转换或函数式转换
错误在哪里?它必须是第11行中错过的(*)符号。
void TextureInit()
{
char strFile[]="Particle.bmp";
AUX_RGBImageRec *pImage;
/* Выравнивание в *.bmp по байту */
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
/* Создание идентификатора для текстуры */
glGenTextures(1,&TexId[0]);
/* Загрузка изображения в память */
pImage = auxDIBImageLoad(strFile);
/* Начало описания свойств текстуры */
glBindTexture(GL_TEXTURE_2D,TexId[0]);
/* Создание уровней детализации и инициализация текстуры
*/
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGB,pImage->sizeX,
pImage->sizeY,GL_RGB,GL_UNSIGNED_BYTE,
pImage->data);
/* Задание параметров текстуры */
/* Повтор изображения по параметрическим осям s и t */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
/* Не использовать интерполяцию при выборе точки на
* текстуре
*/
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
/* Совмещать текстуру и материал объекта */
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
}
答案 0 :(得分:1)
这不是指针/引用问题,而是字符串编码问题。 auxDIBImageLoadW
需要LPCWSTR
- UTF-16
字符串。您正尝试将ASCII
字符串传递给它。
要解决此问题,请将strFile
声明为wchar_t strFile[] = L"Particle.bmp";
。
答案 1 :(得分:0)
在Unicode版本中(自VS2005以来一直是默认版本),auxDIBImageLoad()
扩展为auxDIBImageLoadW()
(结尾W
代表宽字符,即wchar_t
s),这是API的Unicode UTF-16版本。
您传递给strFile
的{{1}}参数是auxDIBImageLoadW()
- 字符串(不是char
字符串),定义为:
wchar_t
所以你在字符串参数中不匹配。
一个选项是将char strFile[]="Particle.bmp";
定义为strFile
字符串(另请注意wchar_t
前缀以定义字符串文字):
L
或者,如果由于某种原因您必须拥有wchar_t strFile[] = L"Particle.bmp";
字符串,则可以使用ATL helper macro CA2W
(来自char
ansi - ie {{ 1}} - string - to A
ide Unicode UTF-16 char
string):
W
(wchar_t
是围绕#include <atlconv.h> // for CA2W
// char strFile[]...
pImage = auxDIBImageLoad(CA2W(strFile));
Win32 API的方便的RAII包装器。)
答案 2 :(得分:0)
我假设你没有打算来使用Unicode库。在这种情况下,请删除项目属性中_UNICODE和UNICODE的宏定义,然后使用_MBCS。但是,这更有可能在使用不同语言环境的Windows计算机上出现错误。
一般来说,不应该直接使用char或wchar_t与Windows API进行交互。为了获得最大的兼容性,您应该将它们包装在_T宏中。而不是写
char strFile[]="Particle.bmp";
写
TCHAR strFile[]=_T("Particle.bmp");
有关详细信息,请参阅Microsoft文档。
答案 3 :(得分:0)
没有一种方法可以解决。但有趣的是,我来到另一个部分,我已经转移到另一个主题: [https://stackoverflow.com/questions/23064256/opening-a-bmp-with-auxdibimageload-within-glut-library][1]