https://blog.csdn.net/aptx704610875/article/details/49130475
在使用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函数做转换。