ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

vs C++ + MFC项目统一升级升级目标:使用C++20标准 使用最新windowsSDK 使用最新平台工具集(vs2019)

2021-12-10 13:59:15  阅读:190  来源: 互联网

标签:const 禁止显示 解决方案 C++ 升级 cast 使用 MSXML2


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即可

标签:const,禁止显示,解决方案,C++,升级,cast,使用,MSXML2
来源: https://blog.csdn.net/oqqBall/article/details/121854370

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有