VS2003公升級VS2010修改

2021-10-23 02:49:23 字數 3196 閱讀 6295

bug1:

fatal error c1189: #error: mfc does not support winver less than 0x0601. ple

在stdafx.h中把#define winver 0x0500 //為 windows98 和 windows 2000 及更新版本改變為適當的值。
改為:

#define _win32_winnt 0x0601

bug2:

vs2003工程轉 vs2010

一般我們用vs2010開啟乙個111.vcproj檔案,它會出來轉換嚮導提示,我們根據提示自動轉換為2010專案之後,馬上編譯,提示問題:

1> stdafx.cpp

1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(290): error c2146: 語法錯誤: 缺少「;」(在識別符號「pvoid64」的前面)

1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(290): error c4430: 缺少型別說明符 - 假定為 int。注意: c++ 不支援預設 int

1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(8992): error c2146: 語法錯誤: 缺少「;」(在識別符號「buffer」的前面)

其實類似的問題,很多人都問過,但回答都不太正統,有些甚至建議直接修改winnt.**件(太橫了!)。

我發現其實這就是乙個標頭檔案包含的問題,我們用vs2010去新建乙個專案的時候,大家有沒有發現,對比用vs2003來新建乙個檔案,目錄裡面會多了乙個targetver.h的標頭檔案。這就是關鍵了。通過對比vs2010新專案裡面的stdafx.h和vs2003裡面的stdafx.**件,可以看出原來什麼winver等的定義,到了vs2010裡面都用了#include "targetver.h"來代替。

那我們也參考著這麼做唄,修改原來的stdafx.h,登出掉原來系統巨集定義的一大段,直接用#include "targetver.h"來代替。再次用vs2010編譯,一切都ok了。。。

貼上,修改後的stdafx.**件

// stdafx.h : 標準系統包含檔案的包含檔案, // 或是經常使用但不常更改的 // 專案特定的包含檔案

#pragma once

#ifndef _secure_atl #define _secure_atl 1 #endif

#ifndef vc_extralean #define vc_extralean // 從 windows 標頭中排除不常使用的資料 #endif

/* // 如果您必須使用下列所指定的平台之前的平台,則修改下面的定義。 // 有關不同平台的相應值的最新資訊,請參考 msdn。 #ifndef winver // 允許使用 windows 95 和 windows nt 4 或更高版本的特定功能。 #define winver 0x0501 //為 windows98 和 windows 2000 及更新版本改變為適當的值。 #endif

#ifndef _win32_winnt // 允許使用 windows nt 4 或更高版本的特定功能。 #define _win32_winnt 0x0501 //為 windows98 和 windows 2000 及更新版本改變為適當的值。 #endif

#ifndef _win32_windows // 允許使用 windows 98 或更高版本的特定功能。 #define _win32_windows 0x0501 //為 windows me 及更新版本改變為適當的值。 #endif

#ifndef _win32_ie // 允許使用 ie 4.0 或更高版本的特定功能。 #define _win32_ie 0x0500 //為 ie 5.0 及更新版本改變為適當的值。 #endif */

#include 「targetver.h」

#define _atl_cstring_explicit_constructors // 某些 cstring 建構函式將是顯式的

// 關閉 mfc 對某些常見但經常被安全忽略的警告訊息的隱藏 #define _afx_all_warnings

#include // mfc 核心和標準元件 #include // mfc 擴充套件 #include // mfc 自動化類

#include // internet explorer 4 公共控制項的 mfc 支援 #ifndef _afx_no_afxcmn_support #include // windows 公共控制項的 mfc 支援 #endif // _afx_no_afxcmn_support

#include // mfc 套接字擴充套件 #include #include

bug3:

錯誤 1 error c1083: 無法開啟包括檔案:「targetver.h」: no such file or directory d:\1mysmjs\分控\2010code\code\boatctrl\specctrl\stdafx.h 33

複製targetver.**件到現在的專案資料夾目錄下面

bug4:

link : fatal error lnk1104: 無法開啟檔案「mfc71.lib」的原因又一例

[環境]

windows xp os;

visual studio 2008;

本來是vs2003開發的工程,遷移至vs2008後出錯。

[分析]

mfc71.lib是vs2003所使用的mfc類庫;雖然我的機器中同時安裝有vs2003和2008兩個版本,不過由於我的vs2008的類庫查詢path中找不到mfc71.lib而報的錯。更進一步地說,vs2008的類庫查詢path中本來就不應該找到mfc71.lib,而是應該使用它所對應的mfc90.lib。

[對策]

開啟工程屬性, linker > input > ignore specific libraries(忽略特定庫)中輸入 mfc71.lib;mfcs71.lib,重新編譯即可。

對應.vcproj檔案中選項為:ignoredefaultlibrarynames=「mfc71.lib;mfcs71.lib」

[後記]

並不是每個遷移的工程都會報如上的錯。目前尚不清楚,遷移後的工程哪個設定使得vs2008一定去找舊的mfc。若能找得到的話,直接修改那個可能是更對的做法。

VS2003轉換到VS2010的記錄

解決方案目錄所在 d workspaces branches iis建立的 目錄 d workspaces branches aim 1.備份檔案,將brances目錄複製乙份並重命名,我們要轉換的專案目錄是保持不動 第一次轉換不成功可能跟移動了目錄有關,iis已經設定了目錄所在 第一次轉換的時候,...

水晶報表從VS2008公升級到VS2010 注意事項

1 水晶報表的執行時,需要從12版公升級到13版。2 web.config檔案中,需要新增 這個原因還沒弄明白 3 iis中,對應的應用程式池,高階設定中,要設定支援32位。4 如果頁面中,引用了aspnet client system web 2.0.50727 crystalreportview...

VS 2010 開發 ActiveX 自動公升級篇

activex 控制項自動公升級 1.修改 activexdemo 及其所依賴專案的版本資訊 2.為 activexdemo 建立安裝專案 activexdemo.setup 3.選擇 activexdemo.setup 專案,為其設定屬性 4.選擇主輸出檔案,為其設定屬性 5.右鍵 activex...