• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數據加載中……

            vc 常見的編譯器警告處理辦法

            vc中的警告我們可以在工程屬性(property)--c/c++---Advanced-----Disable Specific Warning中加入需要屏蔽的警告號就行,這樣處理比較簡單;
            也可以按照錯誤原因來依次改正,主要是編譯器編譯選項參數設置;

            warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
            原因:BOOL型在windef.h頭文件中被定義,其實際類型為int;BOOL其實就是int型變量,與布爾型bool沒有什么關系
            解決方法:把bool改成大寫的BOOL或者bool bSuccess;int iSuccess = 1;bSuccess = iSuccess != 0;

            warning C4996: 'sprintf' was declared deprecated see declaration of 'sprintf'
            VC6---選項Project | Configuration Properties | C/C++ | Preprocessor | Preprocessor Definitions
            添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE

            VS2005 項目屬性---C/++ --->預處理定義下-》配置 -》下面添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE兩個宏
            或調用VS2005鼓吹的那些帶“_s”后綴的非標準函數,即在其后加上"_S",如sprintf_s
            或文件最開始:
            #define _CRT_SECURE_NO_DEPRECATE
            或者在工程屬性中設置。

            >AFCComDllEx.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:ICF' specification
            1>BZZlib.lib(BZZlib.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance
            1>AFCComDllEx.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:ICF' specification
            解決方法:
            工程設置->設定->link->link general里邊選中Link incrementally

            1>TalkMessageFilter.lib(TalkMessageFilter.obj) : error LNK2005: "struct HINSTANCE__ * __stdcall AfxGetInstanceHandle(void)" (?AfxGetInstanceHandle@@YGPAUHINSTANCE__@@XZ) already defined in mfc80d.lib(MFC80D.DLL)
            1>   Creating library ..\..\..\sdk\lib\Server\AFCComDllExD.lib and object ..\..\..\sdk\lib\Server\AFCComDllExD.exp
            1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
            1>LINK : warning LNK4098: defaultlib 'mfc80.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
            1>LINK : warning LNK4098: defaultlib 'mfcs80.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
            1>..\..\..\run\Server\Debug\AFCComDllExD.dll : fatal error LNK1169: one or more multiply defined symbols found
            原因:默認庫和使用庫發生沖突;在同一個程序中使用不同類型的運行時庫或使用調試和非調試版本的運行時庫,則將收到此警告。
            例如,如果編譯一個文件以使用一種運行時庫,而編譯另一個文件以使用另一種運行時庫(例如單線程運行時庫對多線程運行時庫),
            并試圖鏈接它們,則將得到此警告。應將所有源文件編譯為使用同一個運行時庫。

            下表顯示根據要使用的運行時庫應忽略的庫
            單線程   (libc.lib)   libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib   
            多線程   (libcmt.lib)   libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib   
            使用   DLL   的多線程   (msvcrt.lib)   libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib   
            調試單線程   (libcd.lib)   libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib   
            調試多線程   (libcmtd.lib)   libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib   
            使用   DLL   的調試多線程   (msvcrtd.lib)   libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib  
            例如,如果收到此警告,并希望創建使用非調試、單線程版本的運行時庫的可執行文件,可以將下列選項與鏈接器一起使用: 
            /NODEFAULTLIB:libcmt.lib   /NODEFAULTLIB:msvcrt.lib   /NODEFAULTLIB:libcd.lib   /NODEFAULTLIB:libcmtd.lib   /NODEFAULTLIB:msvcrtd.lib 

            終極解決方法:Project/Setting/Link/General中的 Project Options: 加入 /FORCE:MULTIPLE即可。(vc6)
            vs2005,在project Property->Configuration Properties->liker->Command  Line加入:/FORCE:MULTIPLE

             

            LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in MSVCRT.LIB(MSVCRT.dll)LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRT.LIB
            原因:重復定義
            解決方法:project -> properties -> linker -> input -> ignore specific library

            error C2859: x:\XXX\vc60.pdb is not the pdb file that was used when this precompiled header was created, recreate the precompiled header.
            mschart.cpp

            Linker Tools Warning LNK4099:下面是msdn上的英文翻譯,其實我們可以在linker-Debugging-Generate Debug Info中選No,不要調試信息即可解決
            在“object/library”或“path”中未找到   PDB   “filename”;正在鏈接對象,就像沒有調試信息一樣
            鏈接器未能找到   .pdb   文件。將該文件復制到包含   object/library   的目錄中。
            查找與對象文件相關聯的   .pdb   文件的名稱:  
            使用   lib   /extract:objectname.obj   xyz.lib   從庫中解壓縮對象文件。
            使用   dumpbin   /section:.debug$T   /rawdata   objectname.obj   檢查   .pdb   文件的路徑。
            也可以用   /Z7   編譯,這樣就無需使用   pdb;或者,如果正在鏈接的對象不具有   .pdb   文件,請移除   /DEBUG   鏈接器選項
            或者configuration Properties | C/C++  | Output Files里的Program Database File Name改為$(IntDir)\$(ProjectName).pdb,
            也就是讓 靜態庫pdb不是默認的vc90.pdb,而是跟隨項目名稱,瞬間, 問題解決,不會反復出現重編譯問題.

            ado封裝成class后,在加入到新的工程時會出現:
            error   C2872:   'DataTypeEnum'   :   ambiguous   symbol
            error   C2872:   'ParameterDirectionEnum'   :   ambiguous   symbol
            在StdAfx.h里把#include <afxdb.h>   // MFC database classes
            #include <afxdao.h>   // MFC DAO database classes注釋掉就可以了,
            因為在添加的ADo類里已經導入類庫,再次導入就會重復
              

            do.h,ado.cpp等是一個ado封裝類 ,較容易使用,流傳很廣

            但是在工程應用或封裝為動態庫時經常會出現:

            :error   C2872:   'DataTypeEnum'   :   ambiguous   symbol

            :   error   C2872:   'ParameterDirectionEnum'   :   ambiguous   symbol  

            等類似錯誤,,究其根本是該類型同名出現多個數據庫類下,所以我們只要把不需要的數據庫支持類去掉即可,因此注釋掉stdafx.h里面的dao包含文件即可:

            //#ifndef _AFX_NO_DAO_SUPPORT
            //#include <afxdao.h>   // MFC DAO database classes
            //#endif // _AFX_NO_DAO_SUPPORT

            release編譯時出錯,大家幫看看
            fatal   error   C1047:   The   object   or   library   file   '.\release\AbstractFile.obj '   was   created   with   an   older 
              compiler   than   other   objects;   rebuild   old   objects   and   libraries 
            解決方法:在Build菜單里面選Rebuild All 或者刪除Release目錄再編譯


            vs2008 There was a failure while initializing the Microsoft Visual SourceSafe source control provider. You cannot use this provider to perform source control operations

            解決辦法:

            打開vs2008->tools->options 左邊選 source control (若沒有這一項 看看左下角的 show all settings 復選框是不是沒選上,)然后將右邊current source control plug in 下拉列表 選為 none 點擊ok


            VS2008 MFC添加控件變量的時候,提示腳本出錯.原因是ie8和vs2008沖突。
            解決方法:打開注冊表編輯器,找到“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Zones”,在這個項下面新增一個名字為1000的子項,并且在新增的
            1000項里添加一個名稱為1207的DWORD鍵,值為0。然后關閉重新打開vs2008,問題解決。


            對于VS2005/VS2008 IDE,如果想去掉工程的Unicode屬性,編譯運行時往往會發生這個錯誤

            MFC錯誤ERROR C101008A解決方案

            錯誤提示如下:

            mt.exe : general error c101008a: Failed to save the updated manifest to the file ".\Debug\Draw.exe.embed.manifest". Bpcn

             

            解決方案一:

             

            工程——>屬性——>清單工具——>命令行——>附加選項——>"/validate_manifest"

            解決方案二:
            點class view中的工程,選右鍵,再點clean就可以了; 或者是 build->clean solusion也可以。 

            posted on 2012-09-05 20:45 Benjamin 閱讀(10912) 評論(0)  編輯 收藏 引用 所屬分類: VC

            午夜精品久久久久久99热| 久久久久久曰本AV免费免费| 欧美精品丝袜久久久中文字幕| 久久久精品久久久久特色影视| 亚洲级αV无码毛片久久精品| 国产精品免费看久久久| 国产亚洲成人久久| 久久人搡人人玩人妻精品首页| AAA级久久久精品无码区| 人人狠狠综合久久亚洲88| 99久久国产综合精品网成人影院 | 精品久久久久久久| 亚洲va久久久噜噜噜久久| 久久精品中文无码资源站| 精品伊人久久大线蕉色首页| 久久精品亚洲一区二区三区浴池 | 日本久久久久久中文字幕| 91麻豆国产精品91久久久| 99久久国产综合精品成人影院| 性做久久久久久久久久久| 久久99精品久久久久久| 亚洲日本va午夜中文字幕久久 | 99久久国产综合精品五月天喷水| avtt天堂网久久精品| 久久99热这里只有精品国产| 久久免费国产精品| 国产精品九九久久精品女同亚洲欧美日韩综合区| 色综合久久中文字幕无码| 久久精品国产亚洲一区二区三区| 99久久国产亚洲综合精品| 狠狠色丁香久久综合五月| 久久精品国产色蜜蜜麻豆| 精品久久久一二三区| 国内高清久久久久久| 色88久久久久高潮综合影院| 日日躁夜夜躁狠狠久久AV| 韩国三级大全久久网站| 久久久久女教师免费一区| 久久大香萑太香蕉av| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久国产色AV免费看|