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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM