DLL工程,Debug版本下輸出文件由basetool.dll basetool.lib 改成basetoolD.dll basetoold.lib 需設置:html
一、配置屬性-常規-目標文件名 $(ProjectName) 加dios
二、配置屬性-鏈接器-常規-輸出問件 由 加d編程
三、配置屬性-鏈接器-高級-導入庫,設置文件名$(OutDir)$ProjectName)d.lib瀏覽器
四、若是有導出文件,.def文件中也必定要修改導出庫的名字數據結構
LIBRARY "BaseTool"框架
變爲編輯器
LIBRARY "BaseToold"函數
關於相對目錄工具
相對目錄是相對某個文件而言的,例如在 VC 項目屬性配置附加包含目錄、附加庫目錄則是相對 *.dsp 、 *.vcproj 文件而言的;在某個 *.c 、 *.cpp 文件中使用 #include 包含命令,是相對這個 *.c 、 *.cpp 文件而言的。spa
當前目錄是可見的,通常直接引用文件名(夾)
對於子文件夾能夠添加「./」 。
.. :父目錄
../include :父目錄下的 include 目錄
../.. :祖父目錄
http://www.cnblogs.com/include :祖父目錄下的 include 目錄
-----------------------------------------------------
C/C++附加包含目錄和VC++目錄包含目錄區別?
鏈接器常規附加庫目錄和VC++目錄庫目錄區別?
鏈接器-輸入-附加依賴項
附加依賴項 是指輸入項,如某個.LIB文件a.lib,添加到附加依賴項,你的LIB文件被真正包含進來了。等同於「#pragma comment(lib, "winsock.lib") 」語句
附加庫目錄 是你用 #pragma comment(lib,"a.lib")的時候;此時就搜索a.lib的路徑列表就包含這個路徑。
把它所在的目錄添加到附加庫目錄裏面 :僅僅包含目錄只是告訴IDE,搜索沒有指定路徑的庫文件時,也搜索這裏。
------------------------------------------------------------------------------------------------------------------------------------
VC配置基礎點擊打開連接
一.預處理宏
1. 通用宏
VC6.0 中:
Project Setting à C/C++ à Preprocessor definitions
VC2005 中:
項目屬性 à 配置屬性 à C/C++ à 預處理器定義
WIN32 :指明是 Window 32 位系統的編譯器,通常用做平臺識別。
_MBCS/_UNICODE :指明該工程使用的字符集(多字節字符集 /UNICODE )。
在 VC6.0 的 「Project Setting à C/C++ à Project Options」 處將會有 /D "_MBCS" 或 /D "_UNICODE" 開關。
在 VC2005 的 「 項目屬性 à 配置屬性 à 常規 à 項目默認值 à 字符集 」 中選擇 「 使用多字節字符集 」 或 「 使用 Unicode 字符集 」 ;在 「 項目屬性 à 配置屬性 à C/C++ à 使用 UNICODE 響應文件 」 中選擇 「 是 」 或「 否 」 。在 「 項目屬性 à 配置屬性 à C/C++ à 命令行 」 處將會有 /D "_MBCS" 或 /D "_UNICODE" /D "UNICODE" 開關。
當項目中的文件具備 UNICODE 路徑(例如中文路徑)時,應在 「 項目屬性 à C/C++ à 常規 」 和 「 項目屬性 à 連接器 à 常規 」 中開啓 「 使用 UNICODE 響應文件 」 開關。
_CONSOLE/_WINDOWS :指明應用程序的類型(控制檯程序 /Windows 窗口應用程序)。
_DEBUG/NDEBUG :指明編譯版本( Debug/Release )。
除此以外, VC 不一樣的項目類型,有一些特定的宏,以在編譯器區分項目類型。
2. 特定宏
( 1 ) Win32 Static Library 項目
VC6.0 中:
Project Setting à C/C++ ( Category : General ) à Preprocessor definitions : _LIB
若是選擇了 MFC Support 則 _WINDOWS,_AFXDLL
VC2005 中:
項目屬性 à 常規 à 配置類型 à 靜態庫 (.lib)
項目屬性 à C/C++ à 預處理器 à 預處理器定義: _LIB
( 2 ) Win32 Dynamic-Link Library 項目
VC6.0 中:
Project Setting à C/C++ à Preprocessor definitions : _WINDOWS,_USRDLL,DLL_EXPORTS
VC2005 中:
項目屬性 à 常規 à 配置類型 à 動態庫 (.dll)
項目屬性 à C/C++ à 預處理器 à 預處理器定義: _WINDOWS;_USRDLL;DLL_EXPORTS
( 3 ) MFC DLL 項目
<1>Regular DLL with MFC statically linked (帶靜態連接 MFC 的規則 DLL )
VC6.0 中:
Project Setting à C/C++ à Preprocessor definitions : _WINDOWS,_WINDLL,_USRDLL
VC2005 中:
項目屬性 à C/C++ à 預處理器 à 預處理器定義: _WINDOWS;_USRDLL
<2>Regular DLL using shared MFC DLL (使用共享 MFC DLL 的規則 DLL )
VC6.0 中:
Project Setting à C/C++ à Preprocessor definitions : _WINDOWS,_WINDLL,_AFXDLL , _USRDLL
VC2005 中:
項目屬性 à C/C++ à 預處理器 à 預處理器定義: _WINDOWS;_USRDLL
<3>MFC Extension DLL ( using shared MFC DLL )( MFC 擴展 DLL )
VC6.0 中:
Project Setting à C/C++ à Preprocessor definitions : _WINDOWS,_WINDLL,_AFXDLL ,_USRDLL
VC2005 中:
項目屬性 à C/C++ à 預處理器 à 預處理器定義: _WINDOWS; _AFXEXT
在 DLL 項目中, _USRDLL 宏表示生成 Export Lib !
關於 VC 編譯器預處理宏,參考:
《 Predefined Macros ( VC6.0 ) 》
《 C/C++ Preprocessor Reference-Predefined Macros ( VC8.0 )》
《 What’s the difference between the WIN32 and _WIN32 defines in C++ 》
二.工做目錄和控制檯程序運行參數
VC6.0 中:
「Project Setting à Debug à Working directory」 處填寫 exe 程序的工做目錄。
在 「Project Setting à Debug à Program argument」 處填寫 main 運行參數。
VC2005 中:
在 「 項目屬性 à 配置屬性 à 調試 à 工做目錄 」 處填寫 exe 程序的工做目錄。
在 「 項目屬性 à 配置屬性 à 調試 à 命令參數 」 處填寫 main 運行參數。
默認的工做目錄爲 ProjectDir ,即 *.dsw/*.vcproj 所在目錄。
經過編譯器啓動( Ctrl + F5 )應用程序時,能夠將所依賴的 lib 和 dll 庫文件所在目錄設爲工做目錄。應用程序執行期間,建立、保存文件將在工做目錄中。
工做目錄是指當前目錄, GetCurrentDirectory() 獲得的路徑; SetCurrentDirectory 來改變。
運行目錄是指 exe 所在路徑,可經過 GetModuleFileName() 獲得。
三.附加頭文件包含
VC6.0 中:
VC6.0 默認 include 包含路徑: Tools à Options à Directories à Include files 。
對於特定項目的頭文件包含,在 「Project Setting à C/C++ ( Category : Preprocessor ) à Additional include directories」 處添加附加頭文件目錄,相對目錄參考 *.dsp 文件。
目錄路徑不需添加雙引號,路徑分隔符爲 ’/’ 或 ’/’ ,沒必要考慮反斜槓 ’/’ 的轉義。多個路徑之間以逗號 分隔。
相應的在 「Project Setting à C/C++ à Project Options」 中將會出現 「/I」 的包含命令。
VC2005 中:
VC2005 默認 include 包含路徑:工具 à 選項 à 項目和解決方案 à VC++ 目錄 à 包含文件。
對於特定項目的頭文件包含,在 「 項目屬性 à 配置屬性 à C/C++ à 常規 à 附加包含目錄 」 處添加附加包含目錄,相對目錄參考 *.vcproj 文件。
目錄路徑不需添加雙引號,路徑分隔符爲 ’/’ 或 ’/’ ,沒必要考慮反斜槓 ’/’ 的轉義。多個路徑之間以分號 分隔。
相應的在 「 項目屬性 à 配置屬性 à C/C++ à 命令行 」 中將會出現 「/I 」 的包含命令。
關於 #include 的兩種包含方式
#include <std*.h> 爲編譯器指定的包含路徑下的頭文件: 即在 VC6.0 中的 「Tools à Options à Directories à Include files」 (對應 VC2005 的 「 工具 à 選項 à 項目和解決方案 à VC++ 目錄 à 包含文件 」 )處指定的包含目錄。默認狀況下包括
( 1 ) $(VCInstallDir)include ( /Microsoft Visual Studio /VC98/INCLUDE )
( 2 ) $(VCInstallDir)atlmfc/include ( /Microsoft Visual Studio /VC98/ATL/INCLUDE 、 /Microsoft Visual Studio /VC98/MFC/INCLUDE )
( 3 ) $(VCInstallDir)PlatformSDK/include ( VC2005 )。
用戶也能夠本身添加包含路徑到此。
對於 「Tools à Options à Directories à Include files」 ( 「 工具 à 選項 à 項目和解決方案 à VC++ 目錄 à 包含文件 」 )目錄下的文件的包含,通常可以使用尖括號包含。系統對尖括號的包含優先到編譯器設置的包含路徑下定位,再到附加包含目錄下進行定位。
#include "MyHeader.h" 爲在 「Tools à Options à Directories à Include files」 ( 「 工具 à 選項 à 項目和解決方案 à VC++ 目錄 à 包含文件 」 )處人工添加的 包含路徑下的頭文件或者 附加包含目錄下的頭文件。
對於編譯器提供的標準庫函數頭文件( 「Tools à Options à Directories à Include files」 ( 「 工具 à 選項 à 項目和解決方案 à VC++ 目錄 à 包含文件 」 )),通常使用尖括號進行包含聲明,固然使用雙引號包含也沒有錯。
對於在 「Tools à Options à Directories à Include files」 ( 「 工具 à 選項 à 項目和解決方案 à VC++ 目錄 à 包含文件 」 )處人工添加的 包含路徑和附加包含目錄下的頭文件的包含可使用尖括號進行包含,但通常使用雙引號。
原則上,對於工程或文件可見的包含目錄下的頭文件包含,使用以上兩種包含方式中的任一種都不會出錯,主要是它們在搜索目錄時的順序不同。習慣上使用尖括號包含 標準庫函數頭文件,使用雙引號包含用戶自定義頭文件。建議除標準 SDK (如 DirectX 等),通常針對具體工程使用附加頭文件包含便可,儘可能不要去動編譯器的 「Tools à Options à Directories à Include files」 (對應 VC2005 的 「 工具 à 選項 à 項目和解決方案 àVC++ 目錄 à 包含文件 」 )做編譯器級全局配置。下面的連接庫包含處理同此。
External Dependencies 裏面顯示的是你的工程要用到的頭文件,不在你的工程裏面,並且也不在 VC 的默認包含路徑中。參考:《 VC6.0的 External Dependencies 》。
四.附加連接庫包含
VC6.0 中:
VC6.0 默認 lib 包含路徑: Tools à Options à Directories à Library files
對於特定項目的頭文件包含,能夠經過如下兩步添加附加連接庫:
1. 在 「Project Setting à Link ( Category : Input ) à Additional library path」 處添加附加庫目錄,相對目錄參考 *.dsp 文件。
目錄路徑不需添加雙引號,路徑分隔符爲 ’/’ 或 ’/’ ,沒必要考慮反斜槓 ’/’ 的轉義。多個路徑之間以逗號 分隔。
相應的將會在 「Project Setting à Link à Project Options」 處同步 「/libpath 」 庫包含命令。
2. 在 「Project Setting à Link ( Category : General ) à Object/Library Modules」 處添加庫文件名 YourLib.lib ( 也可在文件中使用 #pragma comment(lib, "YourLib.lib" ) 顯式 導入所依賴的靜態庫),多個庫之間以空格 分隔。
相應的將會在 「Project Setting à Link à Project Options」 處同步包含的庫名稱。
VC2005 中:
VC2005 默認 lib 包含路徑:工具 à 選項 à 項目和解決方案 à VC++ 目錄 à 庫文件
對於特定項目的庫文件包含,能夠經過如下兩種方式添加附加庫目錄:
1.
( 1 )在 「 項目屬性 à 配置屬性 à 連接器 à 常規 à 附加庫目錄 」 處輸入附加庫目錄路徑,相對目錄參考 *.vcproj 文件。
目錄路徑不需添加雙引號,路徑分隔符爲 ’/’ 或 ’/’ ,沒必要考慮反斜槓 ’/’ 的轉義。多個路徑之間以分號 分隔。
相應的將會在 「 項目屬性 à 配置屬性 à 連接器 à 命令行 」 處同步 「/LIBPATH」 庫包含命令。
( 2 )在 「 項目屬性 à 配置屬性 à 連接器 à 輸入 à 附加依賴項 」 處添加庫文件名 YourLib.lib ( 也可在文件中使用 #pragma comment(lib, "YourLib.lib") 顯式 導入所依賴的靜態庫),多個庫之間以空格 分隔。
相應的將會在 「 項目屬性 à 配置屬性 à 連接器 à 命令行 」 處同步包含的庫名稱。
2.
在 「 項目屬性 à 配置屬性 à 連接器 à 命令行 」 處添加庫文件名 YourLib.lib ( 必要時添加相對目錄,保證 YourLib 的可見性)。
五.生成文件目錄設置
VC6.0 中:
在 「Project Setting à General à Output directories」 的 「Output files」 處填寫 *.exe 或 *.lib/*.dll 的生成目錄,相應在 「Project Setting à Link (或 Library ) à Output file name」 處將會同步文件輸出路徑。相對目錄參考 *.dsp 文件。
在 「Project Setting à General à Output directories」 的 「Intermediate files」 處填寫中間文件生成目錄。相對目錄參考 *.dsp 文件。
VC2005 中:
在 「 項目屬性 à 常規 à 輸出目錄 」 處填寫輸出目錄,在 「 項目屬性 à 常規 à 中間目錄 」 處填寫中間目錄,相對目錄參考 *.vcproj 文件。
在 「 項目屬性 à 連接器(或管理員) à 常規 à 輸出文件 」 處填寫輸出文件路徑。
輸出目錄( OutDir )通常爲 $(SolutionDir)$(ConfigurationName)
輸出文件( OutputFile )通常爲 $(OutDir)/$(ProjectName).exe ( *.lib , *.dll )
說明 :
$(SolutionDir) 爲 *.sln 文件所在文件夾,尾帶 ‘/’ ;
$(ProjectDir) 爲 *.vcproj 文件所在文件夾,尾帶 ‘/’ ;
$(ConfigurationName) 爲 *.sln 的 *.vcproj 文件所在文件夾下的 debug 、 release 文件夾,參考 *.vcproj 文件中的 <Configurations> 配置項。
具體在 「 項目屬性 à 配置屬性 à 調試 à 命令 」 下拉點擊 「 編輯 」 ,展開 「 宏 (M )>>」 ,能夠看到不少項目內置宏。
通常的配置爲:
輸出目錄 ( OutDir ): $(ProjectDir)$(PlatformName)/$(ConfigurationName)
中間目錄 ( IntDir ): $(OutDir)/Intermediate
輸出文件 : $(OutDir)/$(ProjectName).lib(dll 、 exe)
六.關於相對目錄
相對目錄是相對某個文件而言的,例如在 VC 項目屬性配置附加包含目錄、附加庫目錄則是相對 *.dsp 、 *.vcproj 文件而言的;在某個 *.c 、 *.cpp 文件中使用 #include 包含命令,是相對這個 *.c 、 *.cpp 文件而言的。
當前目錄是可見的,通常直接引用文件名(夾),對於子文件夾能夠添加 」./」 。
.. :父目錄
../include :父目錄下的 include 目錄
../.. :祖父目錄
http://www.cnblogs.com/include :祖父目錄下的 include 目錄
七.依賴項目聯編
一個解決方案 (dsw 、 sln) 能夠建立不少輔助子項目 (dsp 、 vcproj) ,如何設置使在編譯主項目的時,先編譯所依賴的輔助項目呢?
通常會配置輔助子項目的 OutDir 和主項目相同,這樣生成的 lib 或 dll 對於主項目 exe 直接可見。
VC6.0 中:
選擇菜單 「Project à Dependencies」 能夠選擇須要聯編的項目。
VC2005 中:
在解決方案資源管理器中右擊項目名稱,選擇 「 引用 」 或 「 項目依賴項 」 菜單,可選擇項目依賴項,並能夠設置依賴順序。
八.附加DLL 調試
VC6.0 中:
若是你須要調試的 DLL 是動態裝入( LoadLibrary )的,則須要在 「Project Setting à Debug ( Category : Additional DLLs ) 」 處添加這個 DLL 文件。
九.導出makefile
VC6.0 中選擇菜單 「Project à Export Makefile」 便可導出 Makefile 文件 *.mak 。
VC6 之後再也不支持 makefile 輸出了。
參考:《 VC的 MAKE文件的語法 》,《 vs6 IDE導出的 makefile使用方法 》,《 教你在 VS2005下寫 MakeFile 》
十.代碼的編輯與閱讀導航
Visual Studio 自己就帶有充分的代碼組織、編輯、分析以及閱讀能力的支持。
VC6.0 和 VC2005 中的 「Edit à Find in Files」 支持指定項目、工程或文件內的關鍵字搜索。
VC6.0 的 「Tools à Source Browser」 ,提供對 「Definitions and References」 、 「File Outline」 、 「Base Classes and Members」 、 「Derived Classes and Members」 、 「Call Graph」 、 「Callers Graph」 等導航功能支持。
VC2005 右鍵快捷菜單中支持 「 查找全部引用 」 ;右鍵快捷菜單中的 「 調用瀏覽器 」 支持函數調用關係圖和被調用關係圖的查看。 「 類視圖設置 」 中支持顯示 「 基類型 」 、 「 派生類型 」 、 「 繼承成員 」 等功能。
此外,在閱讀代碼時,咱們可使用書籤( Bookmark )來設置錨點,這樣就能夠實現基於書籤的自定義索引導航。
下面介紹經常使用的編程輔助插件軟件及源代碼層次結構分析工具軟件。
1. Visual Assist X 是一款很是好的 Microsoft Visual Studio 輔助插件,支持 C/C ++, C #, ASP , Visual Basic , Java 和 HTML 等語言,能自動識別各類關鍵字、系統函數、成員變量、自動給出輸入提示、自動更正大小寫錯誤、自動標示錯誤等,有助於提升開發過程的自動化和開發效率。
2 . Windows 下的 Source Insight 是一個面向項目開發的程序編輯器和代碼導航瀏覽器, 它還能顯示 reference trees , class inheritancediagrams 和 call trees 。相應的 Linux 下閱讀源代碼的利器 Source Navigator 能很好地解決文件定位和跳轉問題。
3 . Rational Rose 是利用 UML (統一建模語言)進行分析和設計面向對象軟件系統的強大的可視化工具,能夠進行項目需求分析、結構規劃和生成框架代碼,還能夠支持從現有系統逆向轉出工程代碼,生成 Rose 模型的功能。
逆向工程( Reverse Engineer )就是從現有系統的代碼來生成模型的功能。經過 Rational Rose 分析已有的代碼,可瞭解代碼結構和數據結構,生成類層次關係圖、數據模型圖和組件圖。
十一. VC6 經常使用快捷鍵
Alt+F7 : Project Settings
Ctrl+J/K :尋找上一個 / 下一個預編譯條件
Ctrl+Shift+J/K :尋找上一個 / 下一個預編譯條件並將這一塊選定
Ctrl+Tab :當前打開文檔和上一次打開文檔切換。
Alt+O :頭文件與 cpp 文件的交互顯示
F12 : Goto definition
Shift+F12 : Goto reference
Ctrl+Home : 文檔頭
Ctrl+Shift+Home : 選定從當前位置到文檔頭
Ctrl+End : 文檔尾
Ctrl+Shift+End : 選定從當前位置到文檔尾
Alt+F8 :自動格式重排
Ctrl+F4 :關閉當前文檔
Ctrl+Z/Alt+Backspace : Undo
Ctrl+Shift+Z/Ctrl+Y : Redo
Ctrl+B/Alt+F9 : 編輯斷點
Ctrl+Shift+F9 : 去掉全部斷點
Ctrl+D : 定位工具條查找輸入欄
Alt+F3/Ctrl+F :當前文檔 查找
Ctrl+F3 : 查找下一個
Ctrl+Shift+F3 : 查找上一個
Ctrl+H :替換
Ctrl+] :括號匹配
Ctrl+ ↑ : 向上滾屏
Ctrl+ ↓ : 向下滾屏
Ctrl+ ← : 移到前一個單詞
Ctrl+ → : 移到後一個單詞
Ctrl+Shift+ ← : 選定當前位置到前一個單詞
Ctrl+Shift+ → : 選定當前位置到後一個單詞
Ctrl+Backspace : 刪除當前單詞的前半截(以光標爲分割)
Ctrl+Del : 刪除當前單詞的後半截(以光標爲分割)
Ctrl+L :剪切當前行
Ctrl+Shift+L :刪除當前 行
F2 :上一個書籤
Shift+F2 :上一個書籤
Alt+F2 :編輯書籤
Ctrl + F2 :添加 / 刪除一個書籤
Ctrl+Shift+F2 : 清除全部書籤
參考:
《 VC的環境設置 》
《 VC6.0工程設置介紹 》