目录
原代码
出现错误
解决方法
char*转TCHAR*
string转TCHAR*
原代码
Visual Studio 2022中loadimage方法在easyx.h中的伪代码:
// Image related functions
void loadimage(IMAGE *pDstImg, LPCTSTR pImgFile, int nWidth = 0, int nHeight = 0, bool bResize = false); // Load image from a file (bmp/gif/jpg/png/tif/emf/wmf/ico)
void loadimage(IMAGE *pDstImg, LPCTSTR pResType, LPCTSTR pResName, int nWidth = 0, int nHeight = 0, bool bResize = false); // Load image from resources (bmp/gif/jpg/png/tif/emf/wmf/ico)
出现错误
一般情况下,我们会这样写
IMAGE img;
loadimage(&img, "./resources/abc.png", WIDTH, HEIGHT);
但是会报错,所以需要使用_T方法进行转换:
IMAGE img;
loadimage(&img, _T("./resources/abc.png"), WIDTH, HEIGHT);
拼接字符串也会出错
IMAGE img;
loadimage(&img, _T("./resources/"+"abc.png"), WIDTH, HEIGHT);
包含字符串变量也会出错?
IMAGE img;
string p="./resources/";
loadimage(&img, _T(p+"abc.png"), WIDTH, HEIGHT);
直接用字符串变量也会出错
IMAGE img;
string p="./resources/abc.png";
loadimage(&img, _T(p), WIDTH, HEIGHT);
解决方法
实际上LPCTSTR就是TCHAR*
下面BUFFERSIZE可以自行修改值
char*转TCHAR*
#define BUFFERSIZE 1024
TCHAR* Transform(char c[BUFFERSIZE]) {
TCHAR result[BUFFERSIZE];
MultiByteToWideChar(CP_ACP, 0, c, -1, result, BUFFERSIZE);
return result;
}
string转TCHAR*
#define BUFFERSIZE 1024
TCHAR* Transform(string s) {
TCHAR result[BUFFERSIZE];
char c[BUFFERSIZE];
strcpy_s(c, s.c_str());
MultiByteToWideChar(CP_ACP, 0, c, -1, result, BUFFERSIZE);
return result;
}
主程序改为:
IMAGE img;
loadimage(&img, Transform(...), WIDTH, HEIGHT); // ...使用char*或string类型即可
|