在使用OpenGL加载纹理图的过程中,遇到了Unicode字符集的问题:auxDIBImageLoad函数。
查看定义我们发现系统将函数define为auxDIBImageLoadW函数,而auxDIBImageLoadW函数的参数为LPCWSTR。
通过查阅资料,MultiByteToWideChar函数是解决这个问题的最方便的一种。
解决方法:(LPCWSTR实际上也是CONST WCHAR *类型)
char *filename = "data/map.bmp"; WCHAR wfilename[256]; memset(wfilename,0,sizeof(wfilename)); MultiByteToWideChar(CP_ACP,0,Filename,strlen(Filename)+1,wfilename,sizeof(wfilename)/sizeof(wfilename[0])); auxDIBImageLoad(wfilename);
------------------------------------------------------------------------------------------------------------------------------------------------------
补充一点:如果直接使用“...”的字符串的话,只需要在前面加上L即可完成转化。
例如:
auxDIBImageLoad(L("data/map.bmp")); 或者 MessageBox(NULL,L"Turn to next level!",L"Congratulation",MB_OK)
但是如果是变量字符串,则需使用auxDIBImageLoadW函数做转换。