vc 6.0项目转为vs 2017项目遇到 的问题

在vc6工程转为vc2017工程中,可以直接用vc2017将工程升级。但是有一些错误提示要按提示,修改。其中最大的一个问题是下文的第5条,最后发现是LASLib.lib的版本太老导致的问题。只要把这个llib对应的函数注释掉就可以。laslib可以使用高版本的。

另外,我也尝试了在vc2017新建“文档/视图”程序,将将其移动过去。其实根据就搞错了,原来的程序是基于对话框,“文档/视图”模式会出错。

1、编译错误C2065 “i”: 未声明的标识符

解决办法,将
for (int i = 0; i < m_deviceList.size(); i++)
{
m_ctlDevicelist.AddString(m_deviceList[i]);
}
中变量i的定义放到函数体开头
int i;
for (i = 0; i < m_deviceList.size(); i++)
{
m_ctlDevicelist.AddString(m_deviceList[i]);
}

2、 fopen建议修改为fopen_s

关闭sdl检查即可或或者听从建议使用fopen_s

 

 

 

3、关于error LNK2005的解决办法

项目中出现这个错误的原因是:原始工程为TowerTreat,工程中有个TowerTreat.cpp,文件中定义了CAboutDlg类,但是在vs 2017中我将工程名称改为了TowerModeler,TowerModeler.cpp中也有一个CAboutDlg类,这样在链接的时候会冲突。

4、error LNK2019: 无法解析的外部符号

出现原因是没有配置相关的lib(我的项目中包括opengl的库,opengl的配置:https://blog.csdn.net/kiaralovelysheep/article/details/81735794

 

 

5、LNK1104 无法打开文件“LIBCD.lib”

      出现这类问题一般是由于所运行的项目是VC6(或者vs2003)创建的,而后又用VS2005或者更高版本工具打开项目导致的,原因都是因为LIBCD.lib文件被更改了.要解决问题的话,只要在链接设置那里忽略它就没问题了。

解决办法是:

第一种方案:在项目-属性-链接器- 命令行 加 /nodefaultlib:libcd

第二种方案:在项目-属性-链接器- 输入-忽略特定库加:LIBCD.lib

两种方法都可以。

参考自:https://www.cnblogs.com/hyfemma/archive/2010/11/14/1876846.html

6、错误 LNK2005 "class _AFX_THREAD_STATE * __stdcall AfxGetThreadState(void)" (?AfxGetThreadState@@YGPAV_AFX_THREAD_STATE@@XZ) 已经在 mfc140d.lib(mfc140d.dll) 中定义 TowerModeler D:\repos\GridModeler\TowerModeler\nafxcwd.lib(afxstate.obj) 1

 

7、严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK1112 模块计算机类型“x64”与目标计算机类型“x86”冲突 TowerModeler D:\repos\GridModeler\TowerModeler\ucrtd.lib(ucrtbased.dll) 1

https://blog.csdn.net/tfy1028/article/details/8660823

 

 

 

 

8、IntelliSense:  "char *" 类型的实参与 "LPCWSTR" 类型的形参不兼容

 https://blog.csdn.net/quinn1994/article/details/94618725

 9、/ZI”和“/Gy-”命令行选项不兼容

 

https://jingyan.baidu.com/article/46650658fcec97f549e5f826.html

10、错误 LNK2026 模块对于 SAFESEH 映像是不安全的。 TowerTreat D:\repos\DNPowerGridModelBuilder\LASlib.lib(lasreader.obj) 

 

 https://jingyan.baidu.com/article/47a29f24334312c01423992e.html

 11 0x00007FFF51140BCB (mfc140d.dll)处(位于 TowerModeler.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

 12 引发了未经处理的异常:读取访问权限冲突。 this 是 nullptr。

在vc 6.0中可以这样获取句柄:CTowerTreatDlg* mainWnd = (CTowerTreatDlg*)AfxGetMainWnd();

但是在visual studio中不行。我们可以先获取app,再通过app的m_pMainWnd转化。

CTowerTreatApp* application = (CTowerTreatApp*)AfxGetApp();
CTowerTreatDlg* mainWnd = (CTowerTreatDlg*)application->m_pMainWnd;

 参考自:https://blog.csdn.net/aastoneaa/article/details/7821475

 

 

 

posted @ 2020-04-14 10:19  DowTowne  阅读(2482)  评论(3编辑  收藏  举报