日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

带你玩转Visual Studio

發(fā)布時(shí)間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 带你玩转Visual Studio 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

帶你玩轉(zhuǎn)Visual Studio

帶你新建一個(gè)工程

工程目錄下各文件的含義

解決方案與工程

在這之前先了解一個(gè)概念:解決方案與工程。
解決方案(Solution):一個(gè)大型項(xiàng)目的整體的工作環(huán)境;
工程 (Project):一個(gè)解決方案下的一個(gè)子工程;

在VS中,一個(gè)Solution可以有一個(gè)或多個(gè)Project。在我們創(chuàng)建一個(gè)工程時(shí),如果沒有指定Solution,VS會(huì)幫我們創(chuàng)建一個(gè)與工程名相同的Solution,這時(shí)一個(gè)Solution里只有一個(gè)Project。所有在我們的TestProject的文件目錄結(jié)構(gòu)中TestProject文件夾下還有一個(gè)TestProject文件夾(如圖4),第一個(gè)就是整個(gè)Solution的目錄,第二個(gè)才是Project的目錄。

解決方案相關(guān)的文件:

TestProject.sln:
整個(gè)解決方案(Solution)的配制文件,組織多個(gè)工程和相關(guān)的元素到一個(gè)解決方案中。用鼠標(biāo)雙擊它就能用VS打開整個(gè)工程項(xiàng)目。

TestProject.sdf:
瀏覽相關(guān)的數(shù)據(jù)庫文件,它支持瀏覽和導(dǎo)航的特性。如跳轉(zhuǎn)到方法、變量的聲明,查找所有對象的所有被引用的地方,類視圖等等。

TestProject.suo:
(solution user opertion) 解決方案用戶選項(xiàng),記錄所有將與解決方案建立關(guān)聯(lián)的選項(xiàng), 以便在每次打開時(shí),它都包含您所做的自定義設(shè)置.

TestProject.opensdf:
打開解決方案(Solution)時(shí)的臨時(shí)文件,這個(gè)文件只有你的解決方案在VS打開的狀態(tài)才會(huì)有,工程一關(guān)閉文件就被刪除了。

工程相關(guān)的文件

TestProject.vcxproj:
記錄工程(Project)相關(guān)的屬性配制。

TestProject.vcxproj.filters:
文件過慮器,上圖3“工程結(jié)構(gòu)”中各個(gè)文件的組織和編排都是定義在這個(gè)文件中的。如果由于某種特殊的原因(如系統(tǒng)或VS突然崩潰)導(dǎo)致你打開工程時(shí)文件的組織結(jié)構(gòu)是亂的,100%就是這個(gè)文件的原因。

TestProject.vcxproj.user:
用戶相關(guān)的一些配制。

上面這些文件中有幾個(gè)比較重要的一定不能刪的文件是:

TestProject.sln、TestProject.vcxproj、TestProject.vcxproj.filters

不要問我是怎樣知道這些文件的作用的,請看官方文檔:

VS2010定義:https://msdn.microsoft.com/en-us/library/3awe4781.aspx.

VS2015定義:https://msdn.microsoft.com/en-us/library/vstudio/hx0cxhaw(v=vs.110).aspx

帶你了解VC++各種類型的工程

理解幾個(gè)概念

COM

COM(Component Object Model)組件對象模型是microsoft制定的一個(gè)組件軟件標(biāo)準(zhǔn),跟unix上的CORBA一樣。凡是遵循COM標(biāo)準(zhǔn)開發(fā)出來的組件稱為COM組件。目地是實(shí)現(xiàn)二進(jìn)制方式的軟件重用 。在windows平臺(tái)上,COM的實(shí)現(xiàn)形式有DLL(進(jìn)程內(nèi)組件)和EXE(進(jìn)程外組件)2種。

OLE

OLE(Object Linking and Embedding)對象連接與嵌入是微軟的復(fù)合文檔技術(shù),可方便實(shí)現(xiàn)應(yīng)用程序之間的通信。在后來的OLE2中才導(dǎo)入了 COM,提供了對COM的支持,利用這種技術(shù)可開發(fā)可重復(fù)使用的軟件組件COM。OLE是軟件比較早提出的一種技術(shù)。

ATL

ATL(Active Template Library)活動(dòng)模板庫是一套C++模板庫,常用于開發(fā)COM程序和ActiveX程序。要理解ATL技術(shù)可從以下兩方面理解:

  • ATL可以說是把COM封裝了一下,象MFC一樣做成一個(gè)庫,并有一個(gè)向?qū)?#xff0c;使COM應(yīng)用開發(fā)盡可能地自動(dòng)化、可視化,這就決定了ATL只面向COM開發(fā)提供支持。
  • ATL因其采用了特定的基本實(shí)現(xiàn)技術(shù),擺脫了大量冗余代碼,使用ATL開發(fā)出來的COM應(yīng)用的代碼簡練高效。
    在ATL產(chǎn)生以前,開發(fā)COM組件的方法主要有兩種:一是使用COM SDK(COM軟件開發(fā)包)直接開發(fā)COM組件,另一種方式是通過MFC提供的COM支持來實(shí)現(xiàn)。而現(xiàn)在 ATL已經(jīng)成為Microsoft支持COM應(yīng)用開發(fā)的主要開發(fā)工具。
  • MFC

    MFC(Microsoft Foundation Classes)微軟基礎(chǔ)類是微軟提供的一個(gè)用于Windows程序開發(fā)的基礎(chǔ)類庫。MFC以C++類的形式封裝了Windows的API,并且包含一個(gè)應(yīng)用程序框架,以減少應(yīng)用程序開發(fā)人員的工作量。其中包含的類包含大量Windows句柄封裝類和很多Windows的內(nèi)建控件和組件的封裝類。

    ActiveX

    ActiveX是微軟提出的一組使用COM技術(shù)使得軟件組件在網(wǎng)絡(luò)環(huán)境中進(jìn)行交互的技術(shù)集,它與具體的編程語言無關(guān)。作為針對Internet應(yīng)用開發(fā)的技術(shù),ActiveX被廣泛應(yīng)用于WEB服務(wù)器以及客戶端的各個(gè)方面。同時(shí),ActiveX技術(shù)也被用于方便地創(chuàng)建普通的桌面應(yīng)用程序,此外ActiveX一般具有界面。

    ActiveX既包含服務(wù)器端技術(shù),也包含客戶端技術(shù)。其主要內(nèi)容是:

  • ActiveX控制(ActiveX Control);用于向WEB頁面、Microsoft Word等支持ActiveX的容器(Container)中插入COM對象。
  • ActiveX文檔(ActiveX Document);用于在WEB Browser或者其它支持ActiveX的容器中瀏覽復(fù)合文檔(非HTML文檔),例如Microsoft Word文檔,Microsoft Excel文檔或者用戶自定義的文檔等。
  • ActiveX腳本描述(ActiveX Scripting);用于從客戶端或者服務(wù)器端操縱ActiveX控制和Java程序,傳遞數(shù)據(jù),協(xié)調(diào)它們之間的操作。
  • ActiveX服務(wù)器框架(ActiveX Server Framework);提供了一系列針對WEB服務(wù)器應(yīng)用程序設(shè)計(jì)各個(gè)方面的函數(shù)及其封裝類,諸如服務(wù)器過濾器、HTML數(shù)據(jù)流控制等。
  • 在Internet Explorer中內(nèi)置Java虛擬機(jī)(Java Virtual Machine),從而使Java Applet能夠在Internet Explorer上運(yùn)行,并可以與ActiveX控制通過腳本描述語言進(jìn)行通信。
  • 帶你高效開發(fā)

    使用Visual Assist X

    Visual Assist X Snippets 宏

    Visual Assist X Snippets 宏

    帶你高效管理代碼

    目前主流的版本控制系統(tǒng)有:

  • CVS:是一個(gè)用于代碼版本控制的自由軟件,它是一個(gè)比較早出現(xiàn)的工具,由于它有很多自身的缺陷,現(xiàn)在幾乎被SVN所取代了。
  • SVN:SVN是Subversion的簡稱,它是集中式的版本控制系統(tǒng)。SVN繼承了CVS的基本思想,包含了CVS的幾乎所有功能。你可以認(rèn)為SVN是CVS的升級版(但實(shí)際上它們完全是兩個(gè)軟件)。
  • GIT:GIT是分布式的版本控制系統(tǒng)。相信玩過開源代碼的都知道github吧,它就是一個(gè)基于git的代碼托管平臺(tái)
  • C++工程上傳服務(wù)器要忽視的文件

    C++工程上傳服務(wù)器要忽視的文件

    h: 頭文件 cpp: 源文件 txt: 說明文件,如readme rc: 資源文件 rc2: 資源文件 ico: 圖標(biāo),如logo等 sln: 解決方案工程文件 vcxproj: 工程文件 filters: 文件過慮器

    不要上傳的文件類型

    Debug、Release等編譯結(jié)構(gòu)目錄 ipch目錄 aps: last resource editor state exe: build result idb: build state ipch: build helper lastbuildstate: build helper lib: build result. Can be 3rd party log: build log manifest: build helper. Can be written yourself. obj: build helper pch: build helper pdb: build result res: build helper sdf: intellisense dbase suo: solution user options tlog: build log user: debug settings. Do preserve if just one dev or custom debug settings

    如果用TortoiseSVN進(jìn)行管理,需要手動(dòng)添加ignore屬性將不需要上傳的文件忽略掉。在你工程目錄里,右鍵->TortoiseSVN->Properties->New->Other,彈出的對話框中Property name中選擇svn:ignore,Property value中填入要忽略的內(nèi)容(這里可以使用能配符)。可以設(shè)置全局忽略樣式。

    帶你跳出坑爹的Runtime Library坑

    Multi-threaded /MT Release版的多線程靜態(tài)庫 libcmt.lib Multi-threaded Debug /MTd Debug版的多線程靜態(tài)庫 libcmtd.lib Multi-threaded DLL /MD Release版的多線程動(dòng)態(tài)庫 msvcrt.lib+msvcrtxx.dll Multi-threaded DLL Debug MDd Debug版的多線程動(dòng)態(tài)庫 msvcrtd.lib+msvcrtxxd.dll

    結(jié)論:/MD和/MDd將是潮流所趨,/ML和/MLd方式請及時(shí)放棄,/MT和/MTd在非必要時(shí)最好也不要采用了。

    帶你理解多字節(jié)編碼與Unicode碼

  • 當(dāng)設(shè)置為Use Unicode Character Set時(shí),會(huì)有預(yù)編譯宏:_UNICODE、UNICODE
  • 當(dāng)設(shè)置為Use Unicode Character Set時(shí),會(huì)有預(yù)編譯宏:_UNICODE、UNICODE
  • incremental linking(增量鏈接)的作用

    VS中的路徑宏 vc++中OutDir、ProjectDir、SolutionDir各種路徑

    命令行編譯C/C++程序

    打開安裝目錄下的VSDIR\VC\bin可以看到一系列的可執(zhí)行程序.exe和批處理文件,這些就是VS2010構(gòu)建、編譯、鏈接時(shí)要用到的工具。看一下幾個(gè)主要的工具:

    cl.exe:編譯程序 link.exe:鏈接程序 lib.exe:加載lib庫的程序 nmake.exe:用makefile進(jìn)行構(gòu)建、編譯的工具

    微軟 CL.exe 編譯器

    ##性能分析與優(yōu)化##

    使用VS的性能分析工具

    性能分析工具的選擇

    打開一個(gè)“性能分析”的會(huì)話:Debug->Start Diagnotic Tools Without Debugging(或按Alt+F2),VS2013在Analysis菜單中。

    CPU Usage

    檢測CPU的性能,主要用于發(fā)現(xiàn)影響CPU瓶頸(消耗大量CPU資源)的代碼。

    GPU Usage

    檢測GPU的性能,常用于圖形引擎的應(yīng)用(如DirectX程序),主要用于判斷是CPU還是GPU的瓶頸。

    Memory Usage

    檢測應(yīng)用程序的內(nèi)存,發(fā)現(xiàn)內(nèi)存。

    Performance Wizard

    性能(監(jiān)測)向?qū)?#xff0c;綜合檢測程序的性能瓶頸。這個(gè)比較常用,下面再逐一說明。

    性能(監(jiān)測)向?qū)?/h3>

    CPU Sampling(CPU采樣):

    進(jìn)行采樣統(tǒng)計(jì),以低開銷水平監(jiān)視占用大量CPU的應(yīng)用程序。這個(gè)對于計(jì)算量大的程序可大大節(jié)省監(jiān)控時(shí)間。

    Instrumentation(檢測):

    完全統(tǒng)計(jì),測量函數(shù)調(diào)用計(jì)數(shù)和用時(shí)

    .NET memory allocation(.NET 內(nèi)存分配):

    跟蹤托管內(nèi)存分配。這個(gè)好像只有托管代碼(如C#)才可用,一般以C++代碼好像不行。

    Resource contention data(并發(fā)):

    檢測等待其他線程的線程,多用于多線程的并發(fā)。

    性能分析報(bào)告

    視圖類型

    有幾個(gè)不同的視圖可供我們切換,下面加粗的部分是個(gè)人覺得比較方便和常用的視圖。

    • Summary(概要):整個(gè)報(bào)告概要說明
    • Call Tree(調(diào)用樹):以樹形表格的方式展開函數(shù)之間的關(guān)系。
    • Module(模塊):分析調(diào)用的不同的程序模塊,如不同的DLL、lib模塊的耗時(shí)
    • Caller/Callee(調(diào)用與被調(diào)用):以數(shù)值顯示的調(diào)用與被調(diào)用的關(guān)系
    • Functions(函數(shù)統(tǒng)計(jì)):以數(shù)值顯示的各個(gè)函數(shù)的執(zhí)行時(shí)間和執(zhí)行次數(shù)統(tǒng)計(jì)值
    • Marks(標(biāo)記):
    • Processers(進(jìn)程):
    • Function Detials(函數(shù)詳情):以圖表的方式形象地顯示:調(diào)用函數(shù)-當(dāng)前函數(shù)-被調(diào)用子函數(shù)之間的關(guān)系和時(shí)間比例。

    專用術(shù)語

    • Num of Calls:(函數(shù))調(diào)用次數(shù)
    • Elapsed Inclusive Time:已用非獨(dú)占時(shí)間
    • Elapsed Exclusive Time:已用獨(dú)占時(shí)間
    • Avg Elapsed Inclusive Time:平均已用非獨(dú)占時(shí)間
    • Avg Elapsed Exclusive Time:平均已用獨(dú)占時(shí)間
    • Module Name:模塊名稱,一般為可執(zhí)行文件(.exe)、動(dòng)態(tài)庫(.dll)、靜態(tài)庫(.lib)的名稱。

    調(diào)用約定__cdecl、__stdcall和__fastcall

    什么是調(diào)用約定

    函數(shù)的調(diào)用約定,顧名思義就是對函數(shù)調(diào)用的一個(gè)約束和規(guī)定(規(guī)范),描述了函數(shù)參數(shù)是怎么傳遞和由誰清除堆棧的。它決定以下內(nèi)容:(1)函數(shù)參數(shù)的壓棧順序,(2)由調(diào)用者還是被調(diào)用者把參數(shù)彈出棧,(3)以及產(chǎn)生函數(shù)修飾名的方法。

    常見的調(diào)用約定有__cdecl、__stdcall、fastcall,應(yīng)用最廣泛的是__cdecl和__stdcall,下面我們會(huì)詳細(xì)進(jìn)行講述。。還有一些不常見的,如 __pascal、__thiscall、__vectorcall。

    __cdecl的特點(diǎn)

    __cdecl 是 C Declaration 的縮寫,表示 C 和 C++ 默認(rèn)的函數(shù)調(diào)用約定。是C/C++和MFCX的默認(rèn)調(diào)用約定。

    • 按從右至左的順序壓參數(shù)入棧、。
    • 由調(diào)用者把參數(shù)彈出棧。切記:對于傳送參數(shù)的內(nèi)存棧是由調(diào)用者來維護(hù)的,返回值在EAX中。因此對于像printf這樣可變參數(shù)的函數(shù)必須用這種約定。
    • 編譯器在編譯的時(shí)候?qū)@種調(diào)用規(guī)則的函數(shù)生成修飾名的時(shí)候,在輸出函數(shù)名前加上一個(gè)下劃線前綴,格式為_function。如函數(shù)int add(int a, int b)的修飾名是_add。

    __stdcall的特點(diǎn)

    __stdcall是Standard Call的縮寫,是C++的標(biāo)準(zhǔn)調(diào)用方式,當(dāng)然這是微軟定義的標(biāo)準(zhǔn),__stdcall通常用于Win32 API中(可查看WINAPI的定義)。

    • 按從右至左的順序壓參數(shù)入棧。
    • 由被調(diào)用者把參數(shù)彈出棧。切記:函數(shù)自己在退出時(shí)清空堆棧,返回值在EAX中。
    • __stdcall調(diào)用約定在輸出函數(shù)名前加上一個(gè)下劃線前綴,后面加上一個(gè)“@”符號和其參數(shù)的字節(jié)數(shù),格式為_function@number。如函數(shù)int sub(int a, int b)的修飾名是_sub@8。

    __fastcall的特點(diǎn)

    __fastcall調(diào)用的主要特點(diǎn)就是快,因?yàn)樗峭ㄟ^寄存器來傳送參數(shù)的。

    • 實(shí)際上__fastcall用ECX和EDX傳送前兩個(gè)DWORD或更小的參數(shù),剩下的參數(shù)仍自右向左壓棧傳送,被調(diào)用的函數(shù)在返回前清理傳送參數(shù)的內(nèi)存棧。
    • __fastcall調(diào)用約定在輸出函數(shù)名前加上一個(gè)“@”符號,后面也是一個(gè)“@”符號和其參數(shù)的字節(jié)數(shù),格式為@function@number,如double multi(double a, double b)的修飾名是@multi@16。
    • __fastcall和__stdcall很象,唯一差別就是頭兩個(gè)參數(shù)通過寄存器傳送。注意通過寄存器傳送的兩個(gè)參數(shù)是從左向右的,即第1個(gè)參數(shù)進(jìn)ECX,第2個(gè)進(jìn)EDX,其他參數(shù)是從右向左的入棧,返回仍然通過EAX。

    __thiscall

    __thiscall是C++類成員函數(shù)缺省的調(diào)用約定,但它沒有顯示的聲明形式。因?yàn)樵贑++類中,成員函數(shù)調(diào)用還有一個(gè)this指針參數(shù),因此必須特殊處理,thiscall調(diào)用約定的特點(diǎn):

    • 參數(shù)入棧:參數(shù)從右向左入棧
    • this指針入棧:如果參數(shù)個(gè)數(shù)確定,this指針通過ecx傳遞給被調(diào)用者;如果參數(shù)個(gè)數(shù)不確定,this指針在所有參數(shù)壓棧后被壓入棧。
    • 棧恢復(fù):對參數(shù)個(gè)數(shù)不定的,調(diào)用者清理?xiàng)?#xff0c;否則函數(shù)自己清理?xiàng)!?/li>

    調(diào)用約定與(動(dòng)態(tài))庫

    調(diào)用約定與(動(dòng)態(tài))庫

    參考:

    • 帶你玩轉(zhuǎn)Visual Studio

    總結(jié)

    以上是生活随笔為你收集整理的带你玩转Visual Studio的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。