Visual C++ 2005編程
Windows編程其實不難。通過本書的全面學習,你會發現Visual C++ 2005會讓你的Windows編程之路變得更加得寬敞。在你的學習之路上,唯一的障礙就是:在你接觸Windows編程的各種細節之前,你必須要全面系統的學習C++的語言特性,特別是C++的面向對象設計技術。Visual C++ 2005提供了很多的Windows編程工具,而面向對象技術在這些工具中的作用是非常重要的。本書就將要帶你學習、理解、掌握這些技術。
通過本章的學習,將使你對 C++ 編寫應用程序的一些基本概念有一個整體的了解。 Visual C++ 2005 集成開發環境( IDE )的各種操作都非常簡單、易懂,因此將通過對 IDE 的快速瀏覽使你學習到大部分的操作。熟悉 IDE 的最好方法就是創建、編譯、執行一個簡單的程序來實踐。到本章結束,你會學習到:
?????? · ??? Visual C++ 2005 的主要組件是什么?
?????? · ??? .Net 框架由什么組成?它具有什么優勢?
?????? · ??? 什么是解決方案和工程以及如何創建?
?????? · ??? 控制臺程序相關知識
?????? · ??? 如何創建、編輯程序?
?????? · ??? 如何編譯、鏈接、執行 C++ 控制臺程序?
??????
·
???
如何創建、執行基本的
Windows
程序?
好了,打開你的PC,啟動Windows,在功能強大的Visual C++ 2005中開始我們的Window編程之旅!
.Net框架
.Net框架是微軟.Net開發產品的中心概念,當然也包括Visual C++ 2005。.Net框架由兩部分組成:應用程序執行宿主-通用語言運行時(CLR)和.Net框架類庫集合。當代碼在CLR環境下執行時,.Net框架類提供了函數功能支持,不管我們的代碼是何種語言編寫的。所以,使用C++、C#和其他支持.Net框架的語言編寫應用程序都可以使用相同的類庫。
在Visual C++ 2005中,可以編寫兩種基本不同類型的C++程序:一種是在本地計算機上直接運行的程序,此類C++符合ISO/ANSI語言標準,被稱為本地C++程序;另一種就是在CLR控制下運行的程序,此類C++是ISO/ANSI語言標準的一個擴展,被稱為C++/CLI。它們通常也稱為CLR程序或者C++/CLI程序。
嚴格上說,.Net框架并不屬于Visual C++ 2005,而是Windows操作系統為了幫助快速建立應用程序和Web Services而包含的組件。.Net框架不但在代碼的可靠性、安全性上有非常大的優勢,而且可以把C++和20多種支持.Net框架的語言進行混合編程。.Net框架的一個不利之處就是程序的性能下降,不過這種性能下降在大多數環境是可以忽略的。
通用語言運行時 (CLR)
對于很多用高級語言(Visual Basic、C#、C++等)編寫的程序,它們都是在CLR標準環境中執行的。CLR已經作為通用語言規范(CLI)的一種被收錄到歐洲計算機制造商協會(ECMA)標準ECMA-355之中,并在進一步完善以符合ISO標準(ISO/IEC 23271)。所以CLR是CLI的一種實現。這就是為什么CLR下的C++被寫為C++/CLI,它是通用語言結構下的特殊C++。因此在其他操作系統上可能會看到實現CLI的C++/CLI編譯器。
ECMA的所有標準信息都可以在
http://www.ecma-international.org
得到。ECMA-335現在可以免費下載。
CLI是虛擬機中一個非常重要的規范,它允許不同高級語言編寫的應用程序,在不修改和編譯源代碼的條件下直接在不同的系統環境中執行。在編譯高級語言時,CLI為虛擬機指定了標準的中間語言。在.Net框架中,中間語言被稱為微軟中間語言(MSIL)。中間語言的代碼最后在執行時被及時映射到機器代碼運行。當然,在CLI中間語言里的代碼也可以在其他擁有CLI實現的環境被執行。
CLI 也定義一個通用的數據類型集,稱為通用類型系統( CTS ),可以被所有面向 CLI 實現的語言使用。 CTS 說明了如何在 CLR 中使用這些類型,同時包含了一個預定義類型集。
我們也可以定義自己的數據類型,定義的方法必須和CLR的說明保持一致。你會發現,通過標準化的數據類型系統描述數據,允許不同語言編寫的組件采用統一的方法處理數據。同時讓不同語言的組件集成到一個應用程序變為可能。
CLR主要通過兩個方面大大提高了數據安全性和程序可靠性:一是動態內存的分配和釋放都是自動完成的;二是在程序執行前程序的MSIL代碼會進行全面的檢測和驗證。CLR也僅僅是CLI規范在Windows PC上的一種實現,在其他的操作系統和硬件平臺上,肯定有不同的CLI實現。有時你會發現CLI和CLR兩個術語被交替使用,盡管它們是非常明顯的不同。CLI是標準規范,CLR是微軟實現的一種CLI。
編寫C++應用程序
在Visual C++ 2005中,可以開發的程序和組件類型非常多。正如在本章前面提到過的兩種基本Windows程序類型:一種是代碼和CLR一起執行;一種是代碼直接編譯為機器碼然后在本地執行。在面向CLR基于窗口的程序中,可以采用.Net框架提供的Windows Forms作為GUI的基礎。Windows Forms可以進行快速的GUI開發,因為它可以很方便的加入標準組件。同時完全自動生成代碼。然后就可以按需修改生成的代碼以滿足我們不同的需要。
對于本地執行的代碼,有多種操作方法。可以使用微軟基礎類(MFC)編寫窗口程序的圖形用戶接口(GUI)。MFC封裝了Windows操作系統的應用程序編程接口(API),實現了GUI的創建和控制,大大減少的程序開發的過程。如果是現在寫的Windows API,它肯定被期望是面向對象的,但因為它比C++的出現早很多年,所以它不具有面向對象的特征。當然,誰也不會強逼你使用MFC,如果你想要更高的效率,那么自己用C++代碼調用API函數吧!
與CLR一些執行的C++代碼被稱為托管C++,因為數據和代碼都是CLR管理的。在CLR程序中,存儲數據動態分配的內存被自動釋放,因此它消除了本地C++程序中常出現的資源泄漏錯誤。而部分在CLR外執行的代碼被稱為非托管C++,CLR與它們的執行沒有明顯的關系。在非托管C++必須小心分配和釋放內存的所有方面,非托管C++也被稱為本地C++,因為它們是被直接編譯為本地的機器碼。
圖 1 - 1 說明了開發 C++ 應用程序的基本過程
圖1-1
圖1-1并沒有覆蓋所有的內容。應用可以既有托管C++又有非托管C++,因此沒有必要把一種環境強制和其他的混入一起。當然,使用混合代碼會有某些方面的損失。所以只在必要時選擇混合編碼,如轉換已有的本地C++代碼,讓其和CLR一些執行時。在本地C++代碼肯定不會有托管C++的一些固有特性。這些特性在托管、非托管代碼組件通信相關方面可以很明顯的看到。但是,當需要開發或者擴展已有的非托管代碼,同時希望獲得使用CLR的優勢時,這種混合托管、非托管代碼的能力是非常重要的。當然,在一個新的應用程序開始時就應該考慮是否希望使用托管C++。
學習Windows編程
在Windows下的交互式應用程序至少包含兩個方面的內容:一是編碼創建用戶交互的圖形用戶接口(GUI);二是編碼處理交互操作以實現應用程序的功能。Visual C++ 2005為Windows程序開發的這兩個方面都提供了大量的輔助功能。正如你在本章后面看到的:可以不編寫任何代碼而創建一個帶GUI的Windows程序。Visual C++ 2005會自動生成創建GUI的基本代碼。但是,我們需要很好的理解這些自動生成的代碼,因為我們要在這些代碼的基礎上進行擴展、修改以滿足我們所需。而這項工作就要求全面、充分的理解C++。
考慮到上面提到的要求,所以最好先學C++――包括本地C++和C++/CLI兩個語言版本,而暫時不涉及Windows編程相關的東西。在掌握了C++后,就可以快速的學習基于C++/CLI和C++的Windows編程。這就意味著學習C++的時候只是使用一些命令行相關的輸入、輸出程序。通過只使用命令行簡單的輸入、輸出功能,我們就可以集中精力研究C++語言如何工作,避免一些不必要的GUI創建和控制。掌握C++以后,你就會發現用C++開發Windows應用程序是多么的容易,也是一種自然的過渡過程。
學習C++
Visual C++ 2005 全面支持兩種不同標準定義的 C++ 語言:
?????? ⑴ ??? ISO/ANSI C++ 標準,支持本地應用程序-非托管 C++ 。此版 C++ 在大多數的 計算機平臺都支持。
??? ⑵ ? C++/CLI標準,支持基于CLR的應用程序,是ISO/ANSI C++的擴展。
本書的第二章到第十章講述C++語言。因為C++/CLI是ISO/ANSI C++的擴展,每章的第一部分講述ISO/ANSI C++語言元素;第二部分講述C++/CLI的附加特性。
編寫C++/CLI程序可以充分利用.Net框架的作用,而這是ISO/ANSI C++程序不可能有的。雖然C++/CLI是ISO/ANSI C++的擴展,但是C++/CLI程序必須符合CLR的要求,因為這些程序要在CLR環境下執行的。也許看到這里,你心里也有了結論:ISO/ANSI C++提供的內存動態分配和釋放與CLR是不兼容的。程序中必須使用CLR的內存管理機制,這就意味著必須用C++/CLI類而不能用本地C++類。
C++語言標準
美國國家標準委員會(ANSI)出版的ISO/IEC 14882文檔定義了ISO/ANSI標準。到1998年,ISO/ANSI 標準C++已經制定了非常完善的C++語言版本。并且得到了大多數的硬件平臺和操作系統的支持。用ISO/ANSI C++編寫的程序可以很容易移植到其它相當的系統環境,但是即便如此,程序中使用的庫函數會決定移植的困難度,特別是建立圖形用戶接口的函數。標準ISO/ANSI C++是很多專業程序員的首選,不但得到了廣泛的支持,也是迄今為止功能最強大的編程語言。
C++語言標準可以在
http://www.iso.org
購買。
為了讓C++能更好的支持ECMA-355定義的通用語言規范(CLI),C++/CLI擴展了ISO/ANSI標準C++。2003年,微軟為了支持C++程序在.Net框架下執行,提出了一個初始的程序開發技術說明,它就成為了后來CLI標準的第一個版本。CLI和C++/CLI都是微軟在.Net框架下提出的。當然,把它們標準化能加快在其他Windows環境中的實現。雖然C++/CLI是C++的擴展,必須注意的是如果希望程序完全在CLR的控制下運行,一些ISO/ANSI C++支持的特性將不能使用的。
在本地環境上,CLR有很多實質性的優勢。讓C++程序基于CLR執行,可以有更好的安全性。也能避免完全使用ISO/ANSI C++的一些潛在錯誤。CLR通過標準化目標編譯環境消除了各種高級語言的不兼容。因此,以C++編寫的模塊可以和其他語言如C#、Visual Basic編寫的模塊組合在一起。
控制臺程序
除了可以開發窗口程序,Visual C++ 2005允許編寫、編譯、測試純粹的C++程序。它們沒有窗口程序那么復雜的要求,是簡單基于字符的命令行程序。在Visual C++ 2005中它們都是通過鍵盤、屏幕的字符模式進行交互,所以也稱為控制臺程序。
學習控制臺程序,而不是Windows編程,這好像偏離了正軌。其實不然,學習C++的時候還不必涉及Windows編程的特殊技術,此時控制臺程序是最好的方法。有許多非常簡單的Windows程序代碼,在學習C++的各種技術時不必為Windows的復雜而心煩意亂。因此本書前面講述C++語言的章節,會介紹一些輕量級的控制臺程序。然后才是很多重量級的Windows程序代碼。
學習C++時,應該集中精力在C++的語言特征上,不必在意語言操作環境。在控制臺程序中只有一個文本接口。此接口對于我們理解C++語言已經足夠了,因此C++語言本身沒有包含任何的圖形功能。在使用微軟基礎類庫(MFC)的本地C++程序,或者是CLR中Windows Forms編寫窗口應用程序時,自然會介紹大量圖形用戶接口編程的知識。
常用的控制臺程序主要有兩種不同的程序類型:Win32控制臺程序,編譯為本地代碼,與標準ISO/ANSI C++兼容;CLR控制臺程序,基于CLR,可以使用C++/CLI的語言特性。
Windows編程思想(Concept)
編寫Windows程序的捷徑就是利用Visual C++ 2005提供的工具。Visual C++ 2005提供的工程創建工具可以自動生成各種類型的應用程序框架,包括窗口程序。用Visual C++ 2005開發程序的第一步就是創建工程。為了快速的了解這些工具,本章后面通過一些例子來詳細介紹創建過程,包括Windows程序的框架。
Windows程序的結構與傳統的從命令行執行的控制臺程序不同,復雜很多。在控制臺程序中,可以直接從鍵盤獲取輸入然后輸出到命令行。而Windows程序只能通過Windows操作系統提供的函數來訪問計算機的輸入、輸出設備。不允許直接訪問硬件資源。Windows可以同時執行多個任務,Windows決定特定的輸入操作,如鼠標點擊和鍵盤按下,會被傳送到哪個應用程序。以此通知相關的應用程序。因此Windows操作系統控制了用戶的所有通信。
在Windows程序和用戶之間的接口有很多,可以在任何時候進行大量不同的輸入操作。用戶可以選擇任意多的菜單項,點擊工具欄按鈕,在應用程序窗口上點擊鼠標。一個設計完善的應用程序可以在任何時候處理任意類型的輸入,因為我們是無法提前知道程序將有什么樣的輸入操作發生。這些用戶操作最先由操作系統接受,統一的處理為事件。和應用程序用戶接口相關的事件通常引起程序部分特殊代碼段的執行。因此程序是如何執行通常由用戶的行為決定。以此方式運行的程序稱為事件驅動程序。與傳統的單一執行順序程序不同。基于過程的程序,它的輸入操作由代碼控制,只有在程序允許的時候才有效。因此,Windows程序是由一些專門響應由用戶行為引起的事件的代碼片斷組成。
圖1-2中的每個方形塊都是為了處理一個特殊事件而編寫的特殊代碼段。這些單獨的代碼塊可能會讓程序看起來很零碎,實際上連接這些代碼塊為一個程序整體是由操作系統完成的。可以把這些程序看作是提供特殊性能的自定義窗口。
在單獨的程序中,為外部事件提供服務的模塊,如菜單選擇、鼠標點擊等,通常都可以訪問應用程序專門的通用數據集合。這些語言程序數據包含程序環境相關的信息,如編輯器中的字符串,棒球程序(游戲)中每個隊員的得分記錄,程序執行過程中發生的一些事件信息。這些共享的數據集可以讓看似獨立的程序模塊用相同的、和諧的方式進行通信和操作。
Visual C++ 2005提供的應用程序向導可以生成Windows程序的每個基本單元,即使這個單元只有少量的幾行代碼。當然這幾行代碼可能變為很多代碼。為了簡化理解C++執行過程,需要一個盡可能簡單的上下文環境。幸好Visual C++ 2005提供了現成的程序環境。
圖1-2
什么是集成開發環境?
Visual C++ 2005的集成開發環境(IDE)功能非常強大,全面支持C++程序的創建、編譯、鏈接和測試。也是學習C++語言的好環境(特別是和一些書籍配合使用)。
為了讓編程C++程序更加容易,Visual C++ 2005設計、集成了很多輔助工具。本章會介紹部分工具。為了不讓學習這些繁瑣的工具、特征、選項變得枯燥,先看看IDE是如何工作的。然后隨著本書來進一步了解IDE的知識。
系統組件
Visual C++ 2005中最基礎的部分(也屬于IDE)是編輯器、編譯器、鏈接器以及庫函數。它們是編寫、執行C++程序最重要的基礎工具。它們的主要作用有:
編輯器
編輯器提供了創建、編輯C++程序源代碼的交互式環境。也提供了一些非常熟悉的常用工具如:剪切和粘貼。編輯器也提供顏色高亮以區別不同的顏色元素。它會自動的識別C++語言的基礎關鍵字,然后根據它們的類型顯示不同的顏色。這項功能不僅能讓代碼更可讀,而且在輸入這些語言關鍵字時如果發生錯誤,編輯器會很友好的作出提示。
編譯器
編譯器把源代碼轉換為對象代碼,在編譯過程中同時檢查和報告錯誤信息。如果程序有無效、無法識別的代碼,編譯器都會報錯誤。結構上的錯誤如只有部分無法執行的程序代碼同樣報錯。編譯器輸出的對象代碼存儲在對象文件中。輸出的對象代碼有兩種類型。對象代碼的擴展名通常是.obj。
鏈接器
鏈接器把編譯器從源代碼產生的模塊文件組合在一起,從C++提供的程序庫把需要的部分代碼塊加入,然后把所有的文件融合為可執行整體。鏈接器也是能檢測錯誤的,如程序引用的代碼丟失或者不存在。
程序庫
程序庫是一個簡單的預先寫好的程序集合,通過標準的、專業程序代碼單元支持、擴展C++語言。所有的程序都可以引入到自己編寫的代碼完成一些常用的操作。Visual C++ 2005在不同的程序庫中都通過程序實現了一些操作,這些程序可以大大的減少自己編寫、測試這些代碼的工作量。前面提到的.Net類庫,還有其他的程序庫,實現太多此處不便列舉。本書會介紹一個最重要的程序庫。
標準C++程序庫定義了一個基礎的函數集,這些函數可以在任何支持ISO/ANSI C++的編譯器上運行。標準C++程序庫實現了有大量的程序功能,包括數值計算(計算平方根和計算三角函數等),字符、字符串處理程序(字符分類和字符比較)等等很多。隨著你掌握更多的ISO/ANSI C++知識,對標準C++程序庫也會更熟悉的。當然也有支持ISO/ANSI C++擴展版的C++/CLI程序庫。
微軟基礎類庫(MFC)提供了對本地基于窗口的應用程序支持。MFC大大的減少了建立應用程序圖形用戶接口的工作量。在進一步研究C++的細微差別后,對MFC也就更熟悉。另一個程序庫Windows Forms也實現了很多的工具程序,和MFC一樣都減少了建立基于窗口的應用程序的工作量。它是在.Net框架下執行的。本書也會介紹如何用Windows Forms庫開發應用程序。
如何使用IDE
本書所有的程序都是在Visual C++ 2005的IDE中開發執行的。啟動Visual C++ 2005以后,會得到和圖1-3類似窗口界面。
圖1-3
圖1-3左邊的窗口是解決方案瀏覽窗口。右上角顯示啟動畫面的窗口是編輯器窗口。底部是輸出窗口。解決方案瀏覽器可以瀏覽每個文件、同時在編輯器中顯示文件內容。也可以向程序添加文件。解決方案瀏覽器窗口有三個其他的切換頁(圖1-3中只顯示了兩個):類視圖、資源視圖和應用程序的屬性管理。也可以通過View菜單選擇不同頁來進行顯示。編輯器是輸入、修改源代碼和其他程序組件的窗口。底部的輸出窗口在編譯、鏈接程序時會顯示一些消息。
工具欄選項
在工具欄區點擊右鍵,可以自定義選擇需要在Visual C++窗口中顯示哪些工具欄。圖1-4顯示了右鍵彈出菜單列舉的所有工具欄名稱。所有當前顯示的工具欄都會在菜單項前面顯示選中標記。
圖1-4
任何時候都可以通過這里定義需要顯示的工具欄。圖1-3中顯示的工具欄有:Build、Class Designer、Debug、Standard和View Designermenu。在菜單左邊的空白灰色區點擊可以使工具欄顯示。點擊選中標記可以使工具欄隱藏。
不必為應用程序有時需要太多的工具欄而感到混亂。因為有些工具欄在需要時會自動的顯示。所以默認的工具欄設置能滿足大多數時候的需要。也許在開發程序的時候會覺得范圍沒有顯示的工具欄很不方便,任何可需之時都可以通過工具欄區右鍵的菜單來改變工具欄設置。
和其他窗口應用程序一樣,Visual C++ 2005的所有工具欄都有提示信息。在工具欄按鈕上稍微的停頓,白色標簽就會顯示工具欄的作用。
工具欄停靠
可停靠工具欄可以通過鼠標拖動到窗口內任意方便的位置。如果是停靠在應用程序的四邊,工具欄就處理停靠狀態。外觀和應用程序頂部的工具欄一樣。頂部的標準工具欄上有一個磁盤圖標、在一個雙眼望遠鏡文件圖標的右邊有一個文本輸入框。把鼠標放在標準工具欄上,按下鼠標左鍵,然后保存左鍵的按下狀態,此時標準工具欄就如是一個單獨的窗口,可以放在任何的地方。
拖動任何可停靠工具欄離開停靠位置時,會看到圖1-5中標準工具欄一樣的效果——一個小的封閉窗口,只是標題欄不同。這種狀態下稱為浮動工具欄。圖1-3中看到的所有工具欄都是可停靠、可浮動的。所以可以用它們做停靠拖動試驗。可以停靠工具欄在一些位置觀察相反的外觀狀態。可以把可停靠工具欄停靠在主窗口的任何位置。
圖1-5
Visual C++ 2005中工具欄使用的一些圖標都比較通用。和其他一些窗口程序一樣,不會給人很陌生的感覺。有時程序員不會重視Visual C++環境中按鈕的確切含義。因此本書會在使用的時候單獨介紹。
通常開發的每個程序都需要建立一個新的工程。著眼于工程的確切含義,理解工程定義機制能幫助學習Visual C++ 2005的IDE。
文檔
關于Visual C++ 2005的資料有很多。微軟開發者網絡(MSDN)文檔庫不僅提供了關于Visual C++ 2005全面的、所有方面的參考資料。還有其他很多的開發資料。在按照Visual C++ 2005的時候,可以選擇部分還是全部的MSDN文檔。如果有足夠的硬盤空間,強烈建議按照MSDN文檔庫。
瀏覽MSDN文檔庫可以用F1鍵。Help菜單下也有多個文檔訪問方法。在本章后面會看到,遇到編碼錯誤時MSDN是一個非常有用的工具,它提供了足夠的參考文檔。
工程和解決方案
工程包含了組成各種類型程序所需的所有內容。可以是控制臺程序、基于窗口的程序或者是其他類型。通常包含一個、多個存儲代碼的源文件,加上一些其他的輔助數據。工程的所有文件都放在工程文件夾。關于工程的一些其他詳細信息存儲在工程文件夾下以vcproj為后綴的XML文件中。工程文件夾下還包含一些其他的文件夾,用來存儲編譯、鏈接工程輸出的文件。
解決方案顧名思義,代表一個特殊數據處理問題的解決方法,它建立了一種有效的集合所有程序代碼、資源的機制。比如商務操作中的分布式順序登陸系統,可能需要在一個解決方案中分別開發幾個不同的工程程序。因此解決方案是存儲一個、多個相關工程所有信息的文件夾。在解決方案文件夾下可以有多個的工程文件夾。關于解決方案的工程信息文件存儲在兩個文件中,分別以.slnand、.suo為后綴。創建工程時,如果沒有選擇把工程加入到某個解決方案中,系統會自動創建一個新的解決方案。
如果在創建工程時也創建了解決方案,就可以把其他的工程加入到這個解決方案中。你甚至可以把任何的工程都加入到此解決方案。在實踐操作時,為了方便管理,只把和解決方案的相關一些工程添加到一起。一般在沒有特殊原因的時候都應該給每個工程建立相應的解決方案。本書所有的例子工程都是單獨的,都有自己的解決方案。
定義工程
在Visual C++ 2005中編寫程序的第一步是創建工程:在主菜單的File -> New -> Project或者快捷鍵Ctrl+Shift+N。也可以創建一些包含代碼的文件及其他組成程序的數據。在工程目錄下的XML文件記錄了工程中使用的一些Visual C++? 2005設置。這些文件都是由IDE自己進行維護,可以不過多關注它們。但是偶爾修改這些文件時需要注意。
到此,已經介紹不少的內容,現在通過一些實踐操作來鞏固這些知識。
實踐——創建Win32工作臺程序工程
下面講述如何創建一個控制臺程序工程。選擇File -> New -> Project打開新建工程對話框,如圖1-6:
圖1-6
新建工程對話框左邊的樹形列表顯示了可以創建的工程類型。在本例中選擇Win32。選擇不同的工程類型決定了應用程序向導會創建怎樣的初始工程內容。新建工程對話框的右邊顯示出所有的子工程模板。應用程序向導會根據選擇的模板創建工程的組成文件。點擊新建工程對話框的OK按鈕后,在下一個出現的對話框中可以自定義創建的文件。對大多數的工程、模板選項,都會自動的創建工程的基礎源代碼模塊。
出現新建工程對話框后,在工程名稱編輯框輸入合適的工程名稱,本例中是Ex1_01。Visual C++ 2005支持長文件名,在命名有很大的彈性。底部的編輯框是解決方案名稱,默認時解決方案文件夾名稱和工程名稱一樣。需要時可以修改解決方案名稱。在中間的Location編輯框是工程文件夾存儲路徑,可以按需修改。如果只是輸入了工程名稱,解決方案工程文件夾名稱會被自動的設置為工程名稱。如果解決方案文件夾不存在它就會被創建。可以通過Location編輯框輸入不同的路徑,或者是Browse按鈕進行選擇。點擊OK后會顯示圖1-7所示Win32應用程序向導。
此向導對話框說明了當前的工程設置。點擊Finish按鈕后向導自動根據設置創建相應的工程文件。點擊向導對話框左邊的Application Settings會顯示圖1-8所示的應用程序設置頁。
圖1-7
圖1-8
在應用程序設置頁可以設置工程選項。在學習C++時,通常創建的工程都是選擇Empty Project檢驗欄。此例中可以不修改這些設置直接點擊Finish按鈕。然后向導創建所有的默認文件。
工程文件夾的名稱和工程名稱是一樣的。所有的工程定義文件都放在工程文件夾下。默認情況下,解決方案文件夾和工程名稱一樣,工程文件夾位于解決方案文件夾下。定義解決方案內容的文件也在解決方案文件夾下。在Windows瀏覽器中可以看到解決方案文件夾下三個文件:
??? ·? 以.sln為后綴的文件記錄了此解決方案的所有工程信息
??? · 以.suo為后綴的文件記錄了解決方案的設置選項。
??? · 以.ncb為后綴的文件記錄了一些解決方案的智能信息。當在編輯窗口輸入代碼時,??????? 智能工具提供自動完成功能和顯示提示信息。
在Windows瀏覽器中查看工程文件夾,初始情況下有六個文件。包括一個工程內容的摘要信息文本文件ReadMe.txt。在這個ReadMe.txt中可能沒有提及存儲工程選項設置文件,以復合文件名稱命名:Ex1_01.vcproj.ComputerName.UserName.user。
在Visual C++ 2005左邊解決方案窗口會自動打開創建的工程,如圖1-9所示。為了能更清晰的查看解決方案切換頁的名稱,圖中增加了每個切換頁的寬度。
圖1-9
解決方案頁顯示了解決方案下的所有工程和包含的文件,此例中只有一個工程。雙擊解決方案的文件名就會在右邊的編輯窗口附加一頁顯示文件的內容。在右邊的多頁編輯窗口中可以及時的交替顯示,只需簡單的單擊相應的切換按鈕。
類視圖頁顯示工程定義的類,包括每個類的內容。在本例中沒有類,因此視圖是空的。在后面討論類的時候,通過類視圖可以很方便、快速的訪問程序中定義的每個類定義、實現以及相互轉移代碼。
屬性管理頁顯示了工程的Debug、Release屬性設置。在本章后面會介紹這些版本信息。在顯示的屬性上點擊右鍵,通過彈出菜單選擇、修改屬性。此時會顯示修改屬性的對話框。任何時候按下Alt+F7都會顯示屬性框。在討論程序的Debug、Release版時會介紹更多信息。
資源視圖頁包含對話框、圖標、菜單、工具欄和其他程序使用的資源。本例中是控制臺程序,沒有使用資源。在編寫窗口程序時,會涉及更多的資源。在資源視圖頁可以編輯、添加工程的可用資源。
和Visual C++ 2005IDE的大多工具一樣,在解決方案瀏覽窗口和其他切換頁上或者一些空白區點擊右鍵,也有上下文相關的彈出菜單。如果解決方案瀏覽窗口影響了編碼位置,可以點擊自動隱藏按鈕。需要顯示時再點擊IDE窗口左邊的名字頁。
編輯源代碼
應用程序向導會生成可編譯、執行的完整Win32控制臺程序。只是這個程序沒有任何實際的功能,為了讓程序有意義需要修改代碼。如果代碼文件在編輯窗口不可見,在解決方案瀏覽窗口中雙擊Ex1_01.cpp文件。此文件是應用程序向導生成的主程序文件。打開后的效果如圖1-10。
圖1-10
如果圖中的代碼行號沒有顯示,從主菜單的Tools -> Options,可以顯示選項設置對話框。展開左邊Text Editor下的C/C++樹子項,選擇General。然后選中對話框右邊的Line Numbers檢測欄。下面會簡單介紹圖1-10中代碼的功能,詳細的信息后面講解。
程序開始的兩行是注釋,所有在“//”后此行的字符都被編譯器忽略。當你想添加注釋時,只需要在注釋前加上“//”。
第四行是#include指令,通過#include指令把stdafx.h文件的內容加入到文件此位置。這是在C++程序中把.h頭文件添加到.cpp源文件的標準方法。
_tmain()函數開始第一行也是此源代碼文件的第一行可執行文件。C++程序的函數就是一個簡單的可執行命名程序單元。每個C++程序至少由一個函數組成,通常是多個函數。
文件的第八、第十行的左右括號分別把_tmain()函數的所有可執行代碼封裝起來。真正的可執行代碼只是第十行,它的作用是結束程序。
現在可以添加如下的兩行代碼到代碼編輯窗口:
// Ex1_01.cpp :定義控制臺程序的入口點
#include “stdafx.h”
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
???
std::cout << “Hello world!\n”;
??? return 0;
}
沒有陰影的代碼是自動生成的,陰影下的代碼需要自己添加。為了產生新的空白行,可以把鼠標放在前一行文本的末尾按下回車鍵,然后就可以輸入代碼。請確保程序和前面的例子代碼一樣,否則可能有編譯錯誤。
第一行輸入代碼是#include指令,把ISO/ANSI C++的標準頭文件內容加入到這個源文件中。<iostream>定義了基礎的I/O操作工具,以及在第二個附加中使用的把內容輸出到命令行。std::cout是標準輸出流,在第二個附加語句中把字符串“Hello world!\n”寫入std::cout。在雙引號之間的字符串會寫入命令行然后顯示出來。
編譯解決方案
編譯解決方案按下F7或者Build->Build Solution菜單項。同樣可以點擊工具欄上相應的按鈕。與Build菜單一樣功能的工具欄可能沒有顯示,想要顯示直接在工具欄區點擊右鍵從彈出菜單選擇Build工具欄。例子程序應該可以編譯成功。如果有錯誤,請檢測在你輸入兩行額外代碼時是否有誤。仔細檢查這兩行代碼。
編譯控制臺程序的輸出文件
例子程序編譯無錯后,在Windows瀏覽器中查看工程文件夾,有一個新的子文件夾Debug。此文件夾包含剛才的編譯操作所輸出的文件。在Debug文件夾下有多個不同的文件。
除了程序的可執行文件.exe,對其他的文件可以不作詳細的了解。如果你對這些文件好奇,下面會簡單快速的說明這些文件信息。
文件擴展名 |
描述信息 |
.exe |
程序的可執行文件,只有在編譯、鏈接都成功后才會產生。 |
.obj |
對象文件,是編譯器根據源代碼產生的機器碼。鏈接器需要這些文件,它們和函數庫一起產生EXE文件。 |
.ilk |
重新編譯工程的時候鏈接器使用的文件。使連接器只把修改過的源代碼對象文件逐步的鏈接到已經存在的EXE中。可以避免在修改程序時每次都重新鏈接所有的代碼。 |
.pch |
預編譯頭文件。通過預編譯頭文件,可以把大量很少修改的主題代碼(特別是C++程序庫代碼)預先處理一次存入.pch文件。通過.PCH文件充分的減少代碼重新編譯的時間。 |
.pdb |
包含在DEBUG模式下運行程序需要的DEBUG信息。在DEBUG下,可以動態檢測程序運行過程中生成的信息。 |
.idb |
包含重新編譯解決方案時需要的信息。 |
程序的Debug和Release版本
在菜單Project -> Ex1_01 Properties下,可以設置工程的很多屬性。可以設置源代碼在編譯、鏈接過程中的處理方式。所有這些設置都統稱為配置,它們影響最后生成的程序版本。創建新的工程工作區時,Visual C++ 2005自動為創建程序兩個不同的配置版本:一是DEBUG版,包含有幫助調試程序的信息。在DEBUG版,程序發生錯誤時,可以逐句執行語句來檢測程序的數據。另一個是RELEASE版,不包含調試信息,含有代碼優化設置。編譯器通過代碼優化可以生成最高效的可執行模塊。這兩個版本的配置信息足夠滿足本書的學習。如果想加入其他的程序配置,可以通過Build -> Configuration Manager菜單訪問配置。如果沒有加載任何工程,這個菜單項不會存在。雖然這不是什么大問題,但是在你瀏覽菜單尋找該項時可能會有迷惑。
在如圖1-1所示的配置管理對話框中,可以從Active solution configuration的下拉列表選擇程序工作的配置文件版本。
圖1-11
從列表選擇了程序的配置版本后用Close按鈕關閉對話框。在開發程序時,通常使用Debug版。在DEBUG下完全調試正確后,通常會再選擇Release重新編譯。Release下產生的代碼是經過優化,沒有調試和跟蹤信息,因此重新運行速度更快,占用的內存更少。
執行程序
成功編譯解決方案后,用Ctrl+F5執行程序,你會看到圖1-12一樣的執行結果。
圖1-12
如你所見,窗口中輸出了雙引號直接的字符內容。字符串最后的“\n”是特殊字符系列,稱為轉義字符,表示換行符號。轉義字符的作用是再字符串中表示一些特殊的不能用鍵盤直接輸入的字符。
實例 —— 創建空的控制臺工程
先前的例子工程包含一些對C++簡單程序來說不需要的額外數據。默認選中的預編譯頭會使工程預編譯stdafx.h文件的內容。此選項對含有大量代碼的C++程序可以減少處理時間,但是對我們的例子沒有什么用處。在下面的實例中,創建空工程然后自己添加源代碼。將用一個新的Win32控制臺程序解決方案(Ex1_02)來說明創建過程。在新建工程對話框里輸入工程名稱后點擊OK按鈕,在新的Win32應用程序向導對話框左邊點擊Application Settings。在Additional options中選中Empty project檢測框。如圖1-13所示。
圖1-13
點擊Finish按鈕后,會創建和前面一樣的工程,只是這次的工程中沒有任何文件。下面向工程添加新的源代碼文件。右鍵點擊解決方案窗口,選擇彈出菜單的Add -> New Item。在Add New Item對話框左邊選擇Code,然后再從右邊選擇C++ File(.CPP)。最后輸入文件名Ex1-02。如圖1-14所示。
圖1-14
點擊Add按鈕后,新文件會加入到工程中,同時在編輯器窗口顯示。當然,現在的文件是空的,在其中輸入下面的代碼:
// Ex1_02.cpp 一個簡單的控制臺程序
#include <iostream> //基本的輸入、輸出庫
int main()
{
??? std::cout << “This is a simple program that outputs some text.” << std::endl;
??? std::cout << “You can output more lines of text” << std::endl;
??? std::cout << “just by repeating the output statement like this.” << std::endl;
??? return 0; // 返回到操作系統
}
在輸入代碼時,窗口會自動縮進對齊,C++用縮進對齊來改善代碼的可讀性。在回車的時候,編輯器根據前一行代碼自動進行縮進對齊。輸入時也可以看到語法顏色高亮。根據輸入內容的不同,編輯器會自動分配一個顏色給不同的元素,據此顯示不同的顏色。
上面的代碼是一個完整的程序。與前一個應用程序向導生成的例子有兩個不同之處。一是沒有包含stdafx.h文件。此次不使用它是因為程序中沒有使用預編譯頭工具。二是函數名稱是main,而不是_tmain。實際上所有的ISO/ANSI C++程序都是從main()開始執行的。微軟同時也提供了另一個名為wmain的函數,根據程序是否使用unicode字符,_tmain可以表示main()或者wmain。在前面的例子中,_tmain在內部被定義為main。在所有的ISO/ANSI C++選擇中都使用名稱main。
輸出語句有一點不同,在main()的第一個語句是:
std::cout << “This is a simple program that outputs some text.” << std::endl;
語句中有兩個“<<”操作符。每個的作用都是把后續的字符串傳送到std::cout顯示。std::cout是標準輸出流。第一個在雙引號之間的字符串被送到輸出流,第二個的std::endl是標準程序庫中定義的特殊字符,表示換行。前面也使用過字符串末尾的轉義字符‘\n’來產生新行。所以上面的語句也可以寫為:
std::cout << “This is a simple program that outputs some text.\n”;
為什么這行代碼用陰影表示,而上一行沒有?因為上一行代碼是為了方便解釋而重復出現的。此行代碼在之前沒有出現過,是新的寫法。所以加了陰影。
現在可以和前面的例子一樣編譯工程。編譯時如果編輯窗口的代碼文件沒有保存,會自動保存。編譯成功后,用Ctrl+F5執行出現。效果如圖1-15所示。
圖1-15
錯誤處理
如果輸入的程序不正確,當然會有錯誤發生。為了進行測試,可以故意在程序中引入錯誤。對已經有錯誤的程序可以直接用來測試。在本例的源代碼編輯窗口中刪除倒數第二行(第8行)末尾的分號。再編譯源代碼,應用出現底部的輸出窗口會顯示下面的錯誤信息:
C2143: syntax error : missing ‘;’ before ‘return’
編譯時的每個錯誤都有一個錯誤號,通過它可以在文檔中查找解決方法。現在的錯誤原因很明顯。但是大多數時候,需要查找文檔來找到問題的原因。為了得到文檔中關于此錯誤的信息,可以在輸出窗口中對應的輸出行上按下F1鍵,會自動打開一個新的窗口來顯示相應的錯誤有關信息。你可以就用上面的C2143錯誤試試按下F1看效果。
修改錯誤后,重新編譯工程。重新編譯的速度會快很多,因為工程定義會自動跟蹤組成工程的每個文件的變化情況。進行普通編譯時,Visual C++ 2005自動和最近的上一次編譯做比較,只編譯那些已經修改過的文件。這就意味著如果工程有多個文件,在一次編譯完成后只修改了其中的一個文件,在鏈接創建新的EXE文件前只有那個修改過的文件才會編譯。
除了Win32控制臺程序外,還有CLR控制臺程序。下一節將介紹CLR控制臺程序。
實例——創建CLR控制臺工程
按下Ctrl+Shift+N鍵打開New Project對話框。選擇CLR類型和CLR Console Application程序模板。如圖1-16所示。
圖1-16
輸入名稱Ex1_03再點擊OK按鈕,應用程序向導自動創建工程的文件。CLR控制臺程序沒有其他的設置選項。所以此模板的CLR控制臺程序初始文件都是一樣的。如果你想建立空的工程(雖然對本書的學習沒有多大的作用)有單獨的空的CLR工程模板。
從圖1-17的解決方案瀏覽器窗口可以看到,與Win32控制臺工程相比有一些其他的文件。
在虛擬資源文件夾下有兩個文件。.ico文件存儲應用程序圖標,在程序最小化的時候顯示。.rc文件記錄了應用程序使用的資源文件——此例中只是有一個圖標。
圖1-17
工程中有一個名為AssemblyInfo.cpp的文件。每個CLR程序都有一個或多個程序集,程序集是形成函數單元的代碼和資源集合。程序集也包含一些CLR的擴展數據;其中有使用數據的類型說明;代碼的版本信息;其他程序集能否訪問此集合的權限信息。簡言之,一個程序集就是CLR程序所有的基礎編譯模塊。
如果編輯窗口中沒有顯示Ex1_03.cpp源代碼文件,在解決方案瀏覽器窗口雙擊文件,編輯窗口會如圖1-18所示。
圖1-18
從效率上考慮,CLR程序使用預編譯頭來提供效率。所以和本地C++控制臺程序一樣,CLR程序默認也有#include指令。下一行代碼是:
??? using namespace System;
所有的.Net工具函數庫都是定義在namespace空間中的。所有可能用到的標準類函數都是在名字空間System內。此行代碼表示此后程序代碼都是使用System名字空間。到底聲明是名字空間呢?
名字空間是一個非常簡單的概念。程序中的代碼、形成.Net庫的代碼都會有大量需要命名的東西——數據類型、變量、函數代碼塊都需要命名。問題就是碰巧你使用的命名已經在庫中使用了,這就會引起名稱混亂。名字空間提供了解決這個問題的辦法。所有定義在名字空間System內的函數庫代碼名字都有一個隱含的名字前綴,這個前綴名就是名字空間的名稱。因此如果庫中名字為String,它的實際名字是System::String。因此如果你在代碼中不注意使用到了String,那么就應該用System::String來訪問.Net庫中的String。
兩個冒號[域]是范圍解析操作符。此處范圍解析操作符把名字空間名稱System和類型名稱String分隔開來。在前面的本地C++程序中也有過范圍解析操作符std::cout和std::endl。它們具有同樣的功能:std是本地C++程序庫的名字空間,cout和endl是在std名字空間類定義的,分別代表標準輸出流和換行字符。
事實上,例子中通過using namespace語句,可以使用System名字空間內的任何名稱,而不需加上空間的名稱前綴。如果你遇到了自定義名稱和庫中的名稱沖突,解決方法就是可以移除using namespace語句,給庫的名稱加上明確的名字空間名稱限定。在第二章會講述更多名字空間的知識。
按下Ctrl+F5編譯、執行程序。輸出效果如圖1-19。
圖1-19
輸出結果和第一個例子一樣。輸出是由下面的語句產生的。
Console::WriteLine(L”Hello World”);
此句使用了一個.Net庫函數,把雙引號之間的字符串寫入命令行。因此CLR和Ex1_01中的本地C++程序語句的等價的:
std::cout << “Hello world!\n”;
CLR語句比本地C++語句有更直接的外觀效果。
Visual C++ 2005的設置選項
Visual C++ 2005中有兩種設置:一種是設置Visual C++ 2005提供的工具,它對每個工程都有效。另一種是每個工程的單獨設置,它可以改變工程代碼在編譯、鏈接時的處理方式。從主菜單選擇Tools -> Options可以打開選項設置對話框。對話框的效果如圖1-20所示。
圖1-20
點擊左邊的子窗口中每個項目前的加號,打開子項列表。圖1-20打開了Project and Solutions下的General子項。在對話框右邊顯示出左邊相關主題的設置。也許現在你只關心部分的設置項,但是還是建議你瀏覽所有的設置內容,對它有一個整體的了解。點擊標題欄的幫助按鈕(問號按鈕)會顯示當前設置項的解釋信息。
也許你需要改變創建工程的默認路徑,修改圖1-20中第一個Environment的設置項,改變projects和solutions的存儲路徑。
在左邊的Projects and Solutions -> VC++ Project Settings下的設置項,是對所有的工程都有效的。從菜單Project -> Properties可以修改指定工程的設置。這個菜單項的名字中可以看出當前工程的名字。
創建、執行Windows應用程序
前面的工程是不是都很容易。現在開始創建兩個Windows應用程序。先用MFC創建本地的C++應用程序。然后創建CLR下的Windows Forms應用程序。對這兩個生成的程序,不會全部詳細討論它們的工程文件內容。只是在某些細節方面,才介紹一些相關知識來幫助我們理解程序。通過這種方法來幫助理解程序執行過程。
創建MFC應用程序
開始創建工程的時候,如果已經有一個活動工程(Visual C++ 2005的主窗口會顯示工程名稱),可以在File -> Close Solution關閉解決方案。如果沒有直接關閉,創建工程時也會自動關閉當前的解決方案。
用菜單New -> Project(或者Ctrl+Shift+N)打開New Project對話框。Project Type選擇MFC,工程模板選擇MFC Application。如圖1-21一樣輸入Ex1_04的工程名稱。
圖 1-21
點擊OK按鈕后,進入到應用程序向導對話框。在此對話框中可以設置很多應用程序包含的選項。都可以在對話框右邊的選項列表進行判斷。如圖1-22。后面會介紹一些具體的選項。
本例中可以忽略這些設置,接受默認值,點擊Finish按鈕用默認設置創建工程。之后的解決方案瀏覽器窗口如圖1-23所示。
圖 1-22
圖1-23
圖1-23中已經通過Property Manager的右鍵菜單Hide隱藏了Property Manager。向導創建了很多的文件。編寫窗口程序時,需要大量的時間努力學習相關知識。其中的.CPP文件包含可執行的源代碼。.H文件包含可執行代碼需要的定義信息。.ICO是圖標文件。通過子文件夾分類,可以進行快速的訪問。它們都是虛擬的文件夾。實際的工程文件夾下不會存在。
在Windows瀏覽器中查看解決方案文件夾,或者其他可以看到文件的方法,你會發現有24個文件。3個在解決方案文件夾下,另外17個文件在工程文件夾下,4個在工程文件夾下的res文件夾中。res子文件夾包含程序使用的資源文件,如菜單圖標等。我們只是在輸入一個工程名稱后就產生了如此多的文件。正是因為產生的文件很多,為每個工程建立單獨的目錄就很有必要了。
工程中的ReadMe.txt文件中解釋了MFC應用程序向導生成的每個文件的作用。需要時可以用Notepad、WordPad或者Visual C++ 2005的編輯器查看其內容。在解決方案中雙擊文件就可以在編輯窗口中打開。
編譯、執行MFC應用程序
執行程序前,必須編譯工程——編譯源代碼鏈接模塊,與控制臺程序一樣。可以用Ctrl+F5編譯然后立即執行。一個單獨的鍵盤快捷鍵完成兩項工作,節約時間。
編譯后,輸出窗口顯示沒有錯誤,程序開始執行。執行效果如圖1-24所示。
圖1-24
程序的功能非常完整,有菜單、工具欄。盡管程序沒有特殊的功能(這些功能需要自己添加)。但是所有的菜單都實現了。你還可以從File -> New創建新的子窗口。
利用應用程序向導創建Windows程序非常容易。當我們不需要Ex1_04這樣簡單的程序時,就需要把程序的外衣一層一層的剝去,深入分析內部結構,實現更豐富的功能就不是很難了。當然,有些人愿意花上一兩個月的準備時間,然后拋棄Visual C++ 2005的輔助工具,用老的編程習慣來編寫Windows程序。這就是為什么一些程序員過去常常吃壽司。隨著Visual C++ 2005的到來,那樣的情景已經不復存在。但是你將不可能知道編程技術角有什么?如果你喜歡壽司,最好給自己選擇一個正確的方向。
創建Windows Forms應用程序
Windows Forms應用程序采用不同的應用程序向導。創建一個新的工程,選擇CLR Project types下的Windows Forms Applicaion模板。輸入Ex1_05工程名,如圖1-25。
圖 1-25
此類程序沒有其他設置,直接點擊OK按鈕創建工程。解決方案瀏覽器窗口顯示了自動生成的文件,如圖1-26。
圖1-26
在工程的目錄下,此工程只有相當少的文件。包括解決方案文件總共只有15個。因此這類工程的初始GUI比使用MFC的本地C++程序更簡單。Windows Forms應用程序沒有菜單和工具欄。只有一個窗口。當然,可以添加菜單和工具欄,Windows Forms應用程序向導默認你不需要菜單和工具欄。編輯窗口也有些不同,如圖1-27。
圖1-27
編輯窗口顯示了應用程序窗口的圖形而不是代碼。因為開發Windows Forms程序的GUI是面向圖形設計而不是編碼設計。可以同畫圖一樣拖放GUI組件到應用程序窗口。Visual C++ 2005會自動生成顯示代碼。按下Ctrl+Alt+X,或者菜單View -> Toolbox,將看到一個額外顯示GUI組件列表的窗口,如圖1-28。
圖1-28
窗口Toolbox 顯示了可以添加到Windows Forms應用程序的標準組件列表。可以嘗試給Ex1_05添加按鈕:點擊Toolbox列表的Button,然后在編輯窗口中Ex1_05的客戶區想顯示按鈕的位置進行點擊。拖動按鈕的邊界可以改變其大小。拖動按鈕改變其位置。同樣可以修改按鈕標題:從鍵盤輸入Start然后按下回車。標題改變了同時激活、打開了另一個窗口:顯示按鈕所有的屬性。關于屬性不會再進行介紹,只是需要記住它們都是影響按鈕外觀效果的規范說明。修改這些屬性以滿足程序的需要。再添加一個Stop標題的按鈕。如圖1-29。
圖1-29
可以再任何時候編輯GUI組件。相應的代碼會自動調整。可以采用同樣的方法添加其他的組件。然后用Ctrl+F5編譯、執行程序。很簡單,對吧!
總結
本章包含了用Visual C++ 2005創建各種應用出現的基本方法。利用應用出現向導,創建、執行本地、CLR控制臺程序。創建MFC窗口程序和基于CLR的Windows Forms程序。
本章的主要知識點有:
??? ·? 通用語言運行時(CLR)是微軟實現的一個通用語言規范(CLI)標準。
??? ·? .Net框架由CLR和.Net庫組成。.Net庫提供了基于CLR的應用程序函數支持。
??? ·? 本地C++應用程序是以支持ISO/ANSI C++語言的。
??? ·? 用C++/CLI編寫的應用程序需要CLR一起執行。
??? ·? 解決方案是一種工程容器。由一個或多個工程組合起來解決某類信息處理問題。
??? ·? 工程是代碼和資源容器,代碼和資源也是構成程序單元函數的元素。
??? ·? 程序集是CLR程序的基本單元。所有的CLR出現都是由一個或多個程序集組成。
從下一章開始,本書前半部分會大量運用控制臺程序。所有說明C++語言要素的例子都是Win32、CLR控制臺程序。在結束對C++語言的學習后才會再次回到基于MFC的應用程序向導上。
已經重新調整字體。謝謝!
謝謝!!!email: seatigerwhiz@163.com
你可以到下面的地址去下載
http://community.csdn.net/Expert/topic/4843/4843413.xml?temp=.2916529
我是一個學習c++的新手,不知道從何學起,我對visual c++ 2005也不知道怎么用.所以我現在迫切需要一些不同項目類型的編程范例,我在visual c++ 2005中搜索了,里面有mfc應用程序編輯演示,可是連接不上,你能幫我做幾個演示的例子嗎?非常期待也非常謝謝!我的郵箱是wgq0513@163.com
先謝謝!
liminghnau@sohu.com
我已經找了好久了,再次感謝!