
國內(nèi)學(xué)C/C“VC6.0”這個名字基本上躲不開。哪怕發(fā)布已經(jīng)二十多年至今不少高校的計算機(jī)、電子信息類實驗課里仍然用它教C語言和C基礎(chǔ)。原因我總結(jié)過安裝包小、啟動快、操作直觀對新手友好編譯純C和基礎(chǔ)C足夠用更重要的是老版本占資源幾乎可以忽略不計舊電腦也能跑得很順暢。然而很多人在裝這軟件的時候就被坑慘了——下載源里捆綁一堆東西、安裝向?qū)Эㄋ?、裝完打不開、打開后又編譯不了最近還有讀者問我“vc6.0 mt.exe”到底是怎么回事。所以這篇不繞彎子從下載、安裝、兼容性配置到第一個C程序跑通再到mt.exe專項排查一步都不跳過盡量寫成一份可以照著做的完整流程。1. 為什么2024年還在用VC6.0先搞清楚它到底能干什么1.1 “老古董”不該被神話但也不需要被嫌棄VC6.0發(fā)布于1998年是Visual Studio 6.0家族中的C/C開發(fā)工具。說人話就是它基本完整支持C90標(biāo)準(zhǔn)對C的支持只到C98早期很多后來的語法——auto自動類型推導(dǎo)、nullptr、lambda、右值引用——統(tǒng)統(tǒng)不認(rèn)識。所以你要是拿它寫現(xiàn)代C會處處碰壁這不奇怪但如果你是在學(xué)C語言入門或者維護(hù)2000年前后的MFC老項目它其實是夠用的甚至比很多新IDE更省心。為什么不少高校實驗課還在用它實話實說教學(xué)用的C語言主要講順序、分支、循環(huán)、函數(shù)、指針、結(jié)構(gòu)體這些基礎(chǔ)內(nèi)容VC6.0完整支持。另一個很現(xiàn)實的原因是機(jī)房電腦配置一般新IDE啟動慢、占內(nèi)存VC6.0雙擊就能開對教學(xué)場景實在太友善。很多教材截圖、習(xí)題答案也都是基于VC6.0界面寫的師生之間溝通成本最低。1.2 不同人群該用它還是換新工具使用場景是否推薦VC6.0建議學(xué)校C語言實驗課推薦幾十行代碼以內(nèi)調(diào)試簡單體驗很好練習(xí)現(xiàn)代CC11/14/17不推薦建議VS Community、Code::Blocks、CLion維護(hù)2000年前后的MFC項目推薦遷移成本太高VC6.0幾乎是最穩(wěn)的鑰匙學(xué)習(xí)Windows圖形界面編程入門看情況用MFC起步可以但別忘了要補(bǔ)C98的老語法坑我個人對初學(xué)者的態(tài)度很簡單如果學(xué)校指定用VC6.0那就用別折騰如果沒人指定建議直接上新的免費IDE。工具永遠(yuǎn)是手段學(xué)會C語言語法和調(diào)試思路才是目的。1.3 聽說VC6.0會和mt.exe糾纏這是勸退點嗎經(jīng)常能在搜索VC6.0相關(guān)問題時看到“mt.exe”這個詞比如“vc6.0 mt.exe_manifest錯誤”“vc6.0 mt.exe無法定位程序輸入點”。嚴(yán)格說mt.exe不是VC6.0自帶的組件而是Windows SDK里的Manifest Tool清單工具從VS2005之后的構(gòu)建流程才開始使用。VC6.0的構(gòu)建流程本來不需要它但很多人機(jī)器上又裝了新版本SDK或VS環(huán)境變量串了或者給老工程加了“調(diào)用mt.exe生成manifest”的附加命令于是各種詭異報錯就來了。這類問題算是低頻但高殺傷不用一開始就害怕。先把安裝和基礎(chǔ)使用跑通我在第6節(jié)單獨給出一套排查方法到時候照著處理就行。2. 下載VC6.0前先把版本、補(bǔ)丁和來源理清楚2.1 確認(rèn)你要的版本中英文、企業(yè)版、SP6補(bǔ)丁常見流傳的VC6.0一般分這么幾類中文企業(yè)版簡體中文版國內(nèi)教學(xué)多數(shù)用這個界面全中文適合新手英文企業(yè)版部分老教材截圖是英文界面查資料時能對上號SP6最終補(bǔ)丁包完整名稱是“Visual Studio 6.0 Service Pack 6”修了一大堆老bug強(qiáng)烈建議安裝。判斷你裝的是不是SP6裝好之后打開“幫助→關(guān)于”對話框里如果顯示“Service Pack 6”字樣就是已經(jīng)打上了沒有顯示就要額外裝補(bǔ)丁。在Win10/11上這事尤其重要很多“打開項目崩潰”“編譯到一半報錯”都和缺SP6有關(guān)。2.2 下載源怎么選避開捆綁和“偽漢化”微軟官方如今早就停止了VC6.0的下載和更新現(xiàn)在能拿到的資源基本都是當(dāng)年MSDN訂閱鏡像的再分發(fā)。這類下載源質(zhì)量參差不齊我給的篩選標(biāo)準(zhǔn)如下頁面會明確標(biāo)注文件大小和MD5/SHA1校驗值下載包體積符合常識完整ISO一般500MB以上小幾十MB的“精簡綠色版”容易缺組件頁面沒有一堆“高速下載”“立即下載”的搶眼按鈕更沒有需要額外裝下載器的強(qiáng)推鏈接解壓密碼在頁面內(nèi)能直接看到而不是藏在某個公眾號后面。另一個很實用的判斷標(biāo)準(zhǔn)文件名字里如果夾帶“破解”“免安裝”“去廣告”這類字眼就別碰。VC6.0本身就是老產(chǎn)品早就不存在授權(quán)激活問題。提示安裝VC6.0整個過程不需要做其他額外操作。個別殺毒軟件會把MSDEV.exe誤報為風(fēng)險程序純屬誤報添加信任即可。2.3 下載后先做軟件包校驗下載完別急著解壓養(yǎng)成校驗哈希的習(xí)慣能篩掉絕大多數(shù)壞包和被修改過的文件。以Windows 10/11自帶的PowerShell為例在文件所在目錄執(zhí)行Get-FileHash .\VSC6.0.iso -Algorithm SHA1或者用傳統(tǒng)命令certutil -hashfile VSC6.0.iso SHA1把命令結(jié)果和下載頁面公布的校驗值對比一致再繼續(xù)。如果不一致多半是下載過程損壞或文件被二次打包過不建議使用。3. 圖解VC6.0安裝全過程Win10/11實操版3.1 安裝前的環(huán)境準(zhǔn)備安裝前建議做三件事用管理員賬戶登錄系統(tǒng)暫時關(guān)閉殺毒軟件實時監(jiān)控防止誤報導(dǎo)致安裝文件被隔離規(guī)劃好安裝路徑盡量選不帶空格的英文路徑例如C:\VC60。這個路徑后面用起來省很多心因為老IDE對中文路徑和空格路徑都有歷史遺留問題。我個人的習(xí)慣是直接裝到C:\VC60或者D:\VC60。以前圖省事裝在C:\Program Files (x86)\Microsoft Visual Studio\VC98這種默認(rèn)路徑結(jié)果部分命令行工具和同學(xué)自己寫的批處理腳本經(jīng)常因為路徑里的空格而出問題排查起來特別麻煩。3.2 安裝向?qū)е鸩阶卟閂C6.0的安裝界面是典型的舊式向?qū)О磳嶋H操作順序描述一下解壓ISO后進(jìn)入目錄找到Setup.exe雙擊運行先選擇“安裝 Visual C 6.0”進(jìn)入歡迎頁面點“下一步”會看到最終用戶許可協(xié)議選擇“我接受協(xié)議”輸入產(chǎn)品ID和用戶名鏡像里一般自帶說明按說明填寫即可選擇安裝類型時請務(wù)必點“自定義”不要選默認(rèn)的“典型安裝”在自定義組件樹里“Microsoft Visual C 6.0”一定要勾選“MSDN Library”如果不想查本地幫助文檔可以不裝能省不少磁盤空間“數(shù)據(jù)訪問”和“工具”按需保留指定安裝路徑點“繼續(xù)”安裝程序開始復(fù)制文件整個過程從幾分鐘到十幾分鐘不等看硬盤速度完成后彈出安裝完成對話框點“結(jié)束”。3.3 安裝完成后立刻檢查版本與補(bǔ)丁安裝完別急著寫代碼先確認(rèn)一件事SP6補(bǔ)丁打了沒有。打開“幫助→關(guān)于”對話框如果看到“Visual C 6.0 Enterprise EditionService Pack 6”之類字樣說明安裝包已包含SP6如果沒有請單獨準(zhǔn)備VS6 SP6安裝包補(bǔ)上。早年完整ISO經(jīng)常自帶SP6從第三方鏡像下載的版本則不一定。打完SP6后建議再處理一個常見問題Win7以上系統(tǒng)里VC6自帶的“打開/保存文件對話框”可能偶發(fā)崩潰老百姓說法就是“一點File Open就閃退”。這個和資源管理器版本太新有關(guān)解決方案在4.2節(jié)展開。3.4 如果安裝程序卡住或報錯在Win10/11上安裝程序偶爾會卡在“正在復(fù)制文件”的階段。最常見的兩個原因殺毒軟件在后臺攔截了對系統(tǒng)目錄的寫入臨時關(guān)閉實時監(jiān)控或在彈出提示時選擇放行安裝程序兼容性問題右鍵以管理員身份運行必要時先把Setup.exe設(shè)置為XP SP3兼容模式。注意不要為了省事直接下載綠色版覆蓋或者中途把安裝目錄刪掉。這樣很容易導(dǎo)致后續(xù)編譯命令找不到cl.exe和nmake.exe排查起來更痛苦。4. 在Win10/11上把VC6.0跑起來的兼容性配置4.1 閃退/無法啟動MSDEV.exe的兼容性設(shè)置裝好VC6.0雙擊桌面快捷方式最常見的現(xiàn)象是進(jìn)程閃一下界面沒出來或者彈個“0x00000000指令引用的0x00000000內(nèi)存。該內(nèi)存不能為read”。這是老IDE在NT內(nèi)核新版本上典型的兼容性bug。基本解決步驟打開VC6安裝目錄找到MSDEV.exe右鍵屬性在“兼容性”標(biāo)簽里勾選“以兼容模式運行這個程序”下拉選擇“Windows XP (Service Pack 3)”勾選“以管理員身份運行此程序”點擊確定后重新啟動。如果還是閃退另一個常見元兇是顯示縮放。Win10/11默認(rèn)把DPI縮放調(diào)到125%或150%而VC6的界面是按96DPI設(shè)計的容易出現(xiàn)界面錯亂甚至崩潰。對策是到兼容性設(shè)置里勾選“替代高DPI縮放行為”在“縮放執(zhí)行”下拉里選“系統(tǒng)增強(qiáng)”或者臨時把系統(tǒng)縮放降到100%再啟動。4.2 打開項目時報“內(nèi)存不能為read”FileTool加載項這個問題相當(dāng)經(jīng)典癥狀是VC6能啟動新建工程也沒問題但點“File→Open”時程序瞬間崩潰。原因是VC6的公共文件對話框調(diào)用的是老版本系統(tǒng)接口新版Windows的通用對話框?qū)崿F(xiàn)和它不兼容了。通行的解決辦法是裝一個叫FileTool.dll的組件加載項。具體步驟下載FileTool.dll英文頁面搜“VC6 FileTool”能找到文件很小放入VC6安裝目錄下的Common\MSDev98\AddIns目錄在VC6菜單“工具→自定義→附加項和宏文件”里勾選FileTool重啟VC6后工具欄會多出兩個文件按鈕以后打開文件時用新增的按鈕它會改用新版系統(tǒng)API不再崩潰。如果只是寫控制臺小程序也可以不裝改用“Project→Add To Project→Files”添加文件不調(diào)用文件對話框也能正常干活。4.3 編譯/鏈接常見報錯新手必看的幾個錯誤提示出現(xiàn)原因處理方法fatal error C1010: unexpected end of file while looking for precompiled header工程默認(rèn)開啟預(yù)編譯頭但源文件沒包含stdafx.h新建源文件或在工程設(shè)置里關(guān)閉預(yù)編譯頭LNK2001: unresolved external symbol _main沒有正確創(chuàng)建Win32控制臺工程新建工程時選“Win32 Console Application”向?qū)Ю镞x“Empty project”LNK1168: cannot open Debug/xxx.exe for writing上次程序還在運行exe被占用關(guān)閉正在運行的黑窗口或中止調(diào)試器編譯通過但運行時報“應(yīng)用程序配置不正確”缺少對應(yīng)運行庫或清單信息確認(rèn)SP6已安裝程序盡量在兼容模式下運行提示VC6.0工程默認(rèn)開啟“預(yù)編譯頭”它要求你引入stdafx.h來緩存編譯信息。如果只是想寫單文件C程序建工程時選擇“Empty project”再手動添加.c源文件然后在“Project→Settings→C/C→Precompiled Headers”里選“Not using precompiled headers”就能避開一堆麻煩。5. 手把手從新建項目到運行第一個C程序5.1 為什么要先建工程再寫代碼很多新手喜歡照著教程先抄代碼然后問“為什么我雙擊.c文件打不開、運行不了”。VC6.0不是現(xiàn)代輕量編輯器它的基本工作單元是“工程”編譯器只看工程里的源文件不認(rèn)桌面上的孤立文件。所以哪怕只寫一個hello.c也建議走一遍工程流程。正確流程菜單“文件→新建→項目”選“Win32 Console Application”填工程名比如hello指定存儲位置向?qū)Ю镞x“空項目”An empty project再次“文件→新建→文件”選“C Source File”填文件名hello.c在編輯區(qū)寫代碼按CtrlF5編譯并運行。強(qiáng)調(diào)第4步選“空項目”是因為向?qū)ё詭У摹癏ello World”模板默認(rèn)生成C文件在C語言課上會多一層干擾。自己添加.c文件更貼合C語言學(xué)習(xí)主線。5.2 常用快捷鍵與調(diào)試入門VC6.0里這幾個快捷鍵一定要記牢F9設(shè)置/取消斷點F7編譯并鏈接整個工程CtrlF5編譯并運行不調(diào)試F5進(jìn)入調(diào)試模式運行F10單步跳過函數(shù)F11單步進(jìn)入函數(shù)。我?guī)W(xué)生演示指針和函數(shù)調(diào)用時最常用的套路是在可疑語句行設(shè)F9斷點按F5啟動調(diào)試程序停住后按F10逐行看在底部“Watch”窗口輸入變量名觀察變化。這套操作路徑就算放到今天的IDE里也大同小異學(xué)會了后面不吃虧。5.3 “程序能編譯但運行后黑屏一閃而過”怎么辦控制臺程序運行結(jié)束會自動關(guān)閉窗口初看就像“沒有反應(yīng)”。這不是bug是窗口被系統(tǒng)回收了。三種處理方法在代碼末尾加getchar();或system(pause);讓程序等待按鍵按CtrlF5運行時VC6的集成環(huán)境會在末尾提示“Press any key to continue”在項目管理器里右鍵工程選“設(shè)置→鏈接→子系統(tǒng)→控制臺”確保生成的是控制臺程序而不是窗口程序。我最推薦第一種。學(xué)習(xí)階段在main函數(shù)結(jié)束前加一句getchar();既能觀察輸出也順便練了輸入函數(shù)。6. mt.exe問題專項這是什么碰到該怎么處理6.1 mt.exe到底是什么、為什么和VC6.0糾纏不清mt.exe全稱Manifest Tool是Windows SDK里的小工具負(fù)責(zé)生成和嵌入“應(yīng)用程序清單”。從VS2005開始Visual Studio的構(gòu)建過程會在鏈接完成后自動調(diào)用mt.exe把manifest信息寫進(jìn)exe里告訴系統(tǒng)程序需要哪些權(quán)限、是否支持UAC等。問題在于VC6.0發(fā)布于清單機(jī)制普及之前它自己的工具鏈完全不懂這套?!皏c6.0 mt.exe”這個組合常見于三種情況系統(tǒng)里裝了新版Windows SDK或VSPATH環(huán)境變量里包含了新工具目錄某些第三方工程或腳本在構(gòu)建后期調(diào)用了mt.exe手動給VC6工程加了“生成后事件”想用mt.exe給舊程序注入UAC清單結(jié)果參數(shù)寫錯或工具版本不對老項目后來被移植到新SDK頭文件、鏈接庫版本混用鏈接階段被新版中間文件干擾。明白了來源排查就有方向多數(shù)時候不是VC6壞了而是構(gòu)建鏈里摻入了新工具。6.2 典型癥狀與解決方案速查表癥狀可能原因處理方案“無法打開文件mt.exe”或“mt.exe不是內(nèi)部或外部命令”路徑環(huán)境變量沒指向SDK/bin把mt.exe所在目錄加進(jìn)PATH或在VC6“工具→選項→目錄”里加上SDK的bin路徑fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt不同版本工具鏈混用常見于新SDK的cvtres參與鏈接關(guān)閉“增量鏈接”清理Debug/Release目錄后重新編譯fatal error CVT1100: duplicate resource且指向type:MANIFESTmanifest資源被重復(fù)嵌入檢查“生成后事件”里是否寫了第二條mt.exe命令刪掉重復(fù)調(diào)用鏈接時提示找不到cvtres.exe或版本不匹配SDK里新工具和VC6資源編譯器沖突優(yōu)先使用VC6安裝目錄自帶的資源編譯工具不要混用新SDK同名程序這幾類錯誤要么是路徑問題要么是工具鏈混用不一定需要重裝VC6。我自己的排查習(xí)慣是先打開“工程→設(shè)置→鏈接”看看有沒有多余的附加命令再檢查環(huán)境變量實在不行才考慮重裝。6.3 如何一勞永逸環(huán)境變量和構(gòu)建后步驟如果你確實需要在新SDK環(huán)境下繼續(xù)用VC6最穩(wěn)妥的做法是“互不干擾”不要安裝新VS后讓新工具目錄自動插到系統(tǒng)PATH首位VC6自己的bin和VC98目錄應(yīng)保持在查找路徑前面如果只是做C/C學(xué)習(xí)不搞UAC和manifest那就完全不要調(diào)用mt.exe一切以VC6自帶工具為準(zhǔn)如果必須用mt.exe給舊程序加manifest建議只在“生成后事件”里調(diào)用一次參數(shù)類似C:\Program Files (x86)\Windows Kits\10\bin\10.0.xxxxx.0\x64\mt.exe -manifest app.manifest -outputresource:Debug\app.exe;#1注意把路徑里的x64換成實際體架構(gòu)manifest文件編碼用UTF-8帶BOM否則中文描述可能亂碼。這種用法適合確有需求的老項目維護(hù)者普通學(xué)生學(xué)習(xí)階段完全用不上。7. 進(jìn)階把VC6.0放進(jìn)虛擬機(jī)一勞永逸7.1 什么樣的環(huán)境最適合虛擬機(jī)方案如果你發(fā)現(xiàn)跟兼容性設(shè)置搏斗了一下午還有最后一招兜底裝一個Windows XP虛擬機(jī)把VC6.0放進(jìn)去。這個方案最大的價值是徹底繞開Win10/11帶來的所有兼容性問題復(fù)現(xiàn)當(dāng)年“雙擊即開”的原始體驗。適合上虛擬機(jī)的人群我總結(jié)了三類大學(xué)實驗課指定VC6.0但主力電腦是Win11兼容模式設(shè)置完還是各種崩潰計劃長期維護(hù)MFC老項目希望每次打開工程都不碰壁想研究早期Win32編程需要在干凈環(huán)境里驗證舊API行為。7.2 建立WinXP虛擬機(jī)跑VC6的步驟選擇虛擬化工具免費又主流的方案是VMware Workstation Player或VirtualBox新建虛擬機(jī)操作系統(tǒng)選“Windows XP”推薦32位Professional SP3內(nèi)存分配1~2GB硬盤建議10GB以上NTFS格式啟動系統(tǒng)后把VC6.0安裝包ISO掛載到虛擬光驅(qū)按第3節(jié)流程安裝安裝SP6補(bǔ)丁再安裝VMware Tools或VirtualBox增強(qiáng)功能方便宿主機(jī)與虛擬機(jī)之間復(fù)制文件設(shè)置共享文件夾例如把宿主機(jī)的D:\share映射成虛擬機(jī)的Z:盤。這套環(huán)境跑下來VC6.0啟動和編譯基本是秒開占用的宿主機(jī)資源也不大。7.3 關(guān)于虛擬機(jī)的兩條實用建議第一裝完系統(tǒng)和VC6.0、打完全部補(bǔ)丁之后立刻做一次“快照”。以后無論怎么折騰環(huán)境壞了就回滾到干凈狀態(tài)特別適合反復(fù)測試教材里的示例代碼。第二把代碼目錄放到宿主機(jī)與虛擬機(jī)共享的文件夾里而不是留在虛擬機(jī)C盤。這樣就算虛擬機(jī)系統(tǒng)哪天掛了代碼也還在宿主機(jī)上不至于跟著虛擬磁盤一起消失。我個人的實操體會是帶學(xué)生做課程設(shè)計時一個干凈的XP虛擬機(jī)配合VC6.0代碼在老系統(tǒng)和新系統(tǒng)之間遷移非常順手很多“老環(huán)境專用”的毛病根本不會出現(xiàn)。用VC6.0這么多年我的體會是它最大的價值不是“新”而是“簡單”。對只學(xué)C語言基礎(chǔ)的人來說它比任何現(xiàn)代IDE都更接近“編輯器編譯器”的樸素形態(tài)對維護(hù)老項目的人來說它又是打開歷史代碼最穩(wěn)妥的那把鑰匙。但千萬不要指望它當(dāng)現(xiàn)代C工具用否則語法和標(biāo)準(zhǔn)上的坑會讓你懷疑人生。最后分享一個小技巧每次裝完VC6.0我都習(xí)慣先把MSDEV.exe的“兼容性”和“管理員權(quán)限”設(shè)置好再在代碼末尾加一個getchar();防止控制臺閃退。這套“安裝三件套”做完后面基本不會因為這些瑣事干擾學(xué)習(xí)。如果你還在和Win10/11下的VC6.0較勁按這個流程走一遍應(yīng)該能少踩不少坑。