近期做MFC相关的工作,遇到好多坑,特意记录下:
(1)c++ 带空格的路径
这个非常坑,路径都对就是读取不了文件,解决方法:“\"”+path+"\""
std::string commond = "convert -o " +img_path+".png -O resolution=250 " +"\"" +pdfPath+"\"";
(2)类型转换错误
- error C2440: “<function-style-cast>”: 无法从“CString”转换为“LPCSTR”
- error C2440: “=”: 无法从“const char *”转换为“LPCWSTR”
- error C2440: “初始化”: 无法从“const char *”转换为“ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>”
我是在VS2013跑的MFC,这个问题也很好解决,解决方法:在属性页——配置属性——常规中将字符集设置为未设置
(3)exe可执行程序的当前路径
当我们将MFC生成exe时,有时需要根据exe的绝对路径来查找相关文件,这里根据系统函数进行,来获取当前的exe所在的绝对路径,代码如下:
std::string GetExePath(void)
{
char szFilePath[MAX_PATH + 1] = { 0 };
GetModuleFileNameA(NULL, szFilePath, MAX_PATH);
(strrchr(szFilePath, '\\'))[0] = 0; // 删除文件名,只获得路径字串
return szFilePath;
}