使用VC2005一些问题及解决方案(一)
首先是我使用VC2005在不通階段的不通感受:
剛開始安裝VS2005時候感覺:真是大啊!裝了我一個上午!!而且運(yùn)行個VC有時能耗我好大的內(nèi)存。。
剛使用VC2005時候的感受:界面挺不錯,貌似功能更強(qiáng)大,對C++標(biāo)準(zhǔn)支持的很好,還可以用我最喜歡的Comic Sans MS字體,還支持代碼收縮等等。。雖然比較慢,但是不像VC6.0那樣老是出現(xiàn)編譯死機(jī)的情況。
開始用VC2005學(xué)習(xí)寫東西的時候的感受:實(shí)在沒有6.0好用,限制太多,很多地方跟VC6.0不一樣,而且很多功能似乎都找不到了。。還不如6.0方便。。。
使用一段時間的感受:雖然經(jīng)常遇到問題但是都是有很好的解決方案的,而且相對6.0,2005的BUG少很多,總體來說如果機(jī)器配置還算可以的話,用2005是挺不錯的。。
下面就是我使用VC2005遇到的以及解決了的問題:
VC遇到的以及解決了的問題
1,對于Radio控件如何正確設(shè)置屬性Group?
首先要確保幾個Radio控件的Tab是按順序的(可以在對話框編輯器中按Ctrl+D將三個控件TABORDER設(shè)置在一起)。然后對第一個Radio控件選擇Group屬性,其他的不用選。對第一個
控件添加關(guān)聯(lián)變量int m_test,并且設(shè)置初值-1,則當(dāng)我們點(diǎn)擊第一個控件m_test值是0,點(diǎn)擊第二個m_test值是1....依此類推。
2,VC2005中添加虛函數(shù)問題:
在VC6.0中可以對類右鍵添加虛函數(shù),在VC2005中需要在類屬性中點(diǎn)擊一個重寫按鈕,在那里添加虛函數(shù)。
3,VC2005動態(tài)添加右鍵菜單問題:
在VC6.0中我們可以在Project->Add To Project->Component and Control中添加組件,如添加Pop-up Menu可以實(shí)現(xiàn)添加右鍵快捷菜單的功能。但是在VC2005中我們沒有這個功能
,但是我們可以手動自己添加,也不是很復(fù)雜。步驟如下(假設(shè)工程是一般MFC視圖工程命名Menu):
1,自己添加一個Menu資源,例如命名為IDR_MENU1,編輯之。頂級菜單是不出現(xiàn)的我們可以隨便設(shè)置不妨為abc。然后添加兩個彈出菜單項(xiàng):顯示(IDM_SHOW)和退出(IDM_EXIT).
2,給CMenuView類中添加WM_RBUTTONDOWN消息的響應(yīng)函數(shù)。代碼如下:
void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值
CMenu menu;
menu.LoadMenuA(IDR_MENU1);
CMenu* pPopup = menu.GetSubMenu(0);
ClientToScreen(&point);?? //客戶坐標(biāo)轉(zhuǎn)換成屏幕坐標(biāo)
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
CView::OnRButtonDown(nFlags, point);
}
對菜單項(xiàng)添加事件很Easy。動態(tài)菜單添加主要用到如下的函數(shù):
BOOL AppendMenu(UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL);
4,下面轉(zhuǎn)帖自:
http://hi.baidu.com/freedomknightduzhi/blog/item/60a5012e512bba554fc226e9.html
惡心的2005
用VC2003一直很爽,到新公司要用2005,早聽說其檢查嚴(yán)格,沒想到,完全是沒事找事型的編譯器.
且不說滿屏幕的:
"警告 4 warning C4819: 該文件包含不能在當(dāng)前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數(shù)據(jù)丟失 "
運(yùn)行個MFC的東西就報"由于應(yīng)用程序的配置不正確,應(yīng)用程序未能啟動"
一查才知道,這是05的特權(quán),缺少動態(tài)庫也不說,直接報個配置不正確,Fuck.不如直接彈出個警告框"程序無法運(yùn)行"適用性更大呢.
這里是重置2005配置的方法:
命令行輸入:devenv /resetuserdata
[[
開始執(zhí)行程序時出現(xiàn)錯誤提示:
沒有找到MSVCP80D.dll,因此這個應(yīng)用程序未能啟動。重新安裝應(yīng)用程序可能會修復(fù)此問題。
解決方法:
項(xiàng)目->屬性->配置屬性->清單工具->常規(guī)->使用FAT32解決辦法
改為“是”即可
此時,應(yīng)該將上次產(chǎn)生的debug文件夾刪除才能正確運(yùn)行。
]]
原因大致是由于2005編譯時,FAT32格式硬盤會給程序加以時間戳,換機(jī)器運(yùn)行時由于時間戳不符的原因?qū)е聼o法運(yùn)行,如果編譯機(jī)器格式為NTFS格式則也不會出現(xiàn)該問題。
這兩天有點(diǎn)焦頭爛額, 我們這邊運(yùn)行的好好的程序, 到了測試的機(jī)器上就不能啟動(是根本運(yùn)行不了, 而不是運(yùn)行出錯), 弄得我異常郁悶。 經(jīng)過了一番摸索, 發(fā)現(xiàn)和 winxp、
win2003中為解決dll hell而引入的manifest機(jī)制有關(guān)系。而以前我們用vs2003開發(fā), 它并沒有強(qiáng)制程序使用manifest, 但到了vs2005中, 這已經(jīng)改成必需的了, 而我們并沒有按照
需要進(jìn)行相關(guān)的配置, 所以程序啟動不了了。 根據(jù)目前的經(jīng)驗(yàn), vs2005編譯的程序不能啟動大致有兩個原因, 下面簡單介紹解決辦法。
1、在開發(fā)組的機(jī)器上(安裝有vs2005)有時都不能啟動
這一般是項(xiàng)目的文件被放在了fat/fat32分區(qū)上導(dǎo)致的, 解決方法是把它們都移動到ntfs分區(qū)上, 或者把“項(xiàng)目屬性|Manifest Tool|General|Use FAT32 Work-around”設(shè)為yes。
2、開發(fā)組運(yùn)行正常, 換到其它機(jī)器上就不行了
這一般就是系統(tǒng)dll(包括crt,mfc,atl等)沒有正確配置導(dǎo)致的。 如果程序是release版, 那么很簡單, 只要把“\SDK\v2。0\BootStrapper\Packages\vcredist_x86”下
的"vcredist_x86。exe"拷貝到目標(biāo)機(jī)器上運(yùn)行即可, 這是以x86平臺為例的, 如果你用的是別的cpu平臺(amd64或ia64)把x86替換成相應(yīng)的內(nèi)容就可以了。
注:[[ ]] 內(nèi)信息轉(zhuǎn)自http://hi.baidu.com/crafter%5Fxmu/blog/item/104040b44b4876768bd4b281.html
這里是"general error c101008a: Failed to save the updated manifest to the file "網(wǎng)上普遍的解決方法:
在用vs2005時,默認(rèn)編碼為unicode,如果在項(xiàng)目中途改變,則編譯時會碰到錯誤general error c101008a: Failed to save the updated manifest to the file
".\Debug\Menu.exe.embed.manifest". Bpcn mt.exe .這時清理解決方案,再重新生成項(xiàng)目便可解決.
這里是"warning C4819: 該文件包含不能在當(dāng)前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數(shù)據(jù)丟失 "網(wǎng)上普遍的解決方法:
一般來說,這個警告沒有什么影響。要想去掉這個警告的方法有:
(1)轉(zhuǎn)換Code文件為Unicode格式;
(2)在Project -> Properties -> Configuration Properties -> C/C++ -> Advance 的 Disable Specific Warnings 中添加相應(yīng)的警告編號:4819;
(3)或找出不符合Unicode格式的文件,然后在該文件的開始處加入下面的語句:
??????? # pragma warning (disable:4819)
2005斷點(diǎn)無法命中的解決方案
1:重新編譯該工程.
2:文件的編碼格式不匹配造成的;修改步驟: 菜單->文件->XXX文件另存為->編碼保存(保存按鈕旁邊的下拉菜單)->Unicode (UTF-8 帶簽名)->確定
這里是"由于應(yīng)用程序的配置不正確,應(yīng)用程序未能啟動"網(wǎng)上普遍的解決方法:
方法一:在類似C:\Program Files\Microsoft Visual Studio 8\VC\redi st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件: msvcm80d.dll msvcp80d.dll
msvcr80d.dll Microsoft.VC80.DebugCRT.manifest 把這幾個文件拷貝到目標(biāo)機(jī)器上,與運(yùn)行程序同一文件夾或放到system32下,就可以正確運(yùn)行了。 其他release版、MFC程序什
么的都是拷redist下相應(yīng)文件夾下的文件就可以了,文件夾后都有標(biāo)識!
結(jié)果: 把這幾個Dll Copy過去,無效....
方法二:工程-》屬性-》配置屬性-》c/c++ -〉代碼生成里,修改運(yùn)行時庫選項(xiàng),將/MD或/MDd 改為 /MT或/MTd,這樣就實(shí)現(xiàn)了對VC運(yùn)行時庫的靜態(tài)鏈接,在運(yùn)行時就不再需要
VC的dll了。
結(jié)果:由于我的程序使用了DLL輸出,使用多線程調(diào)試是不行的,必須多線程調(diào)試DLL,這招也無效....
方法三: 工程-》屬性-》配置屬性-》常規(guī)-》MFC的使用,選擇“在靜態(tài)庫中使用mfc” 這樣生成的exe文件應(yīng)該就可以在其他機(jī)器上跑了。
結(jié)果: 告訴我缺少Boost庫,編譯一次Boost夠我吃頓飯回來了- -
方法四: 你的vc8安裝盤上找到再分發(fā)包vcredist_xxx.exe和你的程序捆綁安裝
結(jié)果: 搜索都沒搜到該EXE,誰叫咱用的是盜版...
最終沒有解決,下午再說.TMMD,2005.
解決了:
期間發(fā)生的問題包括:
1: Ogre的2005 Debug版本無法在其他機(jī)器上運(yùn)行
錯誤描述為:”應(yīng)用程序配置不正確……”
解決方法為:
需要開發(fā)者安裝430MB左右的VS80sp1-KB926604-X86-CHS.exe庫。
需要使用者安裝2.59MB的VCRedist_x86.exe庫。
2: Ogre的2005 Debug版本無法在其他機(jī)器上運(yùn)行
錯誤描述為:” 應(yīng)用程序正常初始化(0xc150002)失敗”
解決方法為:
需要開發(fā)者安裝430MB左右的VS80sp1-KB926604-X86-CHS.exe庫。
需要使用者安裝2.59MB的VCRedist_x86.exe庫。
3:安裝VCRedist_x86.exe庫時報錯
錯誤描述為:”Command Line option syntax error, Type Command /? For help”
解決方法為:
自己從VC2005目錄下找到運(yùn)行時目錄,將其dll庫拷貝出來,粘貼到應(yīng)用程序目錄下。
結(jié)論:
所以,想要運(yùn)行2005編譯后的Ogre引擎支持的相關(guān)Demo,盡量做到以下兩點(diǎn):
1:給予Release 版本
2:將VC運(yùn)行時庫的動態(tài)連接庫一起拷貝過去。
轉(zhuǎn)載于:https://www.cnblogs.com/CCBB/archive/2009/04/25/1443426.html
總結(jié)
以上是生活随笔為你收集整理的使用VC2005一些问题及解决方案(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决android.view.AbsSa
- 下一篇: ubuntu 11.10 安装RTX 腾