1、vs C++ + MFC项目统一升级
升级目标:使用C++20标准 使用最新windowsSDK 使用最新平台工具集(vs2019)
2、无法匹配对应的MFC库
解决方案:vs2019安装中勾选 支持 v142的MFC库
3、解决“错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题
https://blog.csdn.net/LYJ_viviani/article/details/51487877
4、解决 “错误 D8016 “/Gm”和“/std:c++20”命令行选项不兼容”
C/C++ -->代码生成---->"启用最小重新生成" 选择 否
5、bcg库编译
解决方案: 找到 BCGControlBar Pro 28 版本的库,升级到 v142 在做编译
6、函数接口隐式转换检查报错
使用如下方式:
dynamic_cast :有父子继承关系的强转
reinterpret_cast : 指针之间的强转
static_cast :基本数据类型强转 static_cast<int>()
const_cast :强制转换去除 const修饰
7、 双目运算符 ? :
条件表达式的result类型要保持一致
8、bcg库 BCGCBProInc.h 中 设置了自动链接bcg库的操作,在编译其他依赖bcg库时要在
预处理器定义中 加入 _BCGCB_DISABLE_AUTOLINK_
9、error LNK2026: 模块对于 SAFESEH 映像是不安全的
解决方法:
1.打开该项目的“属性页”对话框。
2.单击“链接器”文件夹。
3.单击“命令行”属性页。
4.将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。
10、错误 C3848 具有类型“const youth_GeoAlgorithm::setcmp”的表达式会丢失一些 const-volatile 限定符以调用“bool youth_GeoAlgorithm::setcmp::operator ()(const GIS_DoublePoint &,const GIS_DoublePoint &)”
解决方法: 在仿函数setcmp::operator ()(const GIS_DoublePoint &,const GIS_DoublePoint &) 后面加入const 修饰
11、 error C2039: “DOMDocument”: 不是“MSXML2”的成员
解决方法:
CreateInstance(__uuidof(MSXML2::DOMDocument),NULL ,CLSCTX_INPROC);
改为
CreateInstance(__uuidof(MSXML2::DOMDocument60 ),NULL ,CLSCTX_INPROC);
12、严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2664 “std::pair<CGisVetex *,CGisPath *> std::make_pair<CGisVetex*,CGisPath*>(_Ty1 &&,_Ty2 &&) noexcept(<expr>)”: 无法将参数 1 从“CGisVetex *”转换为“_Ty1 &&” ToolCabinet E:\jinhua_diaodu_Proj\DLL_PROJECT\ToolCabinet\DijkstraAlgorithm.cpp 121
解决方案:
m_Paths.insert(make_pair<CGisVetex*, CGisPath*>(reinterpret_cast<CGisVetex*&&>(pVetex),reinterpret_cast<CGisPath*&&>(pNewPath)));
13、c4596成员中的非法限定名
解决方案:
举例:CDevExtProp& CDevExtProp::operator = (const CDevExtProp &Temp);
定义的成员函数已经在类里了,所以不需要再次声明作用域,把CDevExtProp::去掉即可。
14、严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2679 二元“=”: 没有找到接受“CIndMachine”类型的右操作数的运算符(或没有可接受的转换) ModelCore E:\jinhua_diaodu_Proj\DLL_PROJECT\ModelCore\IndMachine.cpp 99
解决方案: 申明和函数返回类型一样的变量做赋值,然后在转换成*this
15、严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2664 “INT_PTR CArray<CModelShape::CPoint,CModelShape::CPoint &>::Add(ARG_TYPE)”: 无法将参数 1 从“CModelShape::CPoint_tpe<float>”转换为“ARG_TYPE” ModelCore E:\jinhua_diaodu_Proj\DLL_PROJECT\ModelCore\Shunt.cpp 77
解决方案: 构造临时变量赋值,在传入Add函数中
16、严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2653 “MSXML2”: 不是类或命名空间名称 ManagePowerGridLevel E:\jinhua_diaodu_Proj\DLL_PROJECT\cimsvgImport\ManagePowerGridLevel\code\CommonFuncs.h 25
解决方案:
#ifndef _MSXML14_
#define _MSXML14_
#import <msxml6.dll>
using namespace MSXML2;
#endif
17、严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2783 “void std::swap(_Ty &,_Ty &) noexcept(<expr>)”: 未能为“_Enabled”推导 模板 参数 AutoRouting C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\utility 81
18、error LNK2019: 无法解析的外部符号 __vsnwprintf,该符号在函数 "long __stdcall StringVPrintfWorkerW...
答案就是链接:legacy_stdio_definitions.lib 这个lib即可