解決方案,是對所有要完成工作的統稱,一般叫Solution。
項目,也叫工程,是將解決方案分成若干個模塊進行處理,一般叫做Project。添加項目就是添加工程。解決方案是所有項目的總和。
一個項目里面有各種文件,如圖片資源、音頻資源、視頻資源、ICO、MENU、SCROLLBAR等等。是一個獨立的包羅各種資源的集合,基本算是功能齊全完備,自給自足的小團體了。因為每個項目里面都有一個CWinApp類的全局變量theApp,這就注定項目是可以獨立啟動運行的。
它唯一的缺點是小,是解決方案的一部分,能夠獨立完成特定工作的部件。相當於拖拉機上的發動機或者輪胎。形態完整,功能單一。
類,是完成項目的具體途徑,一個項目可以由若干類組成,一般叫做Class。
在ATL項目中:
解決方案還是解決方案。
項目就是所謂的類型庫,在IDL文件中有自己的GUID值。
類型庫是idl文件、COM類文件,.h文件,.cpp文件,.def文件的綜合體。也就是說類型庫里面包含了我們所要用的COM組件(COM類)。
而我們經常使用的word、excel的COM組件,都是通過他們的類型庫導入客戶程序的,然后我們才能通過CoCreateInstance()來構建組件對象。
所有簡單理解,類型庫是所有相關聯的COM組件生成的一個集合。
類就是COM類,也稱為COM組件。CoCreateInstance()函數第一個參數就是COM類的GUID。
而且,ATL生成的DLL文件是以項目為單位的,生成的DLL文件名稱就是項目名+.dll。因此和MFC類似,ATL的類型庫也是一個獨立的能被客戶程序導入的dll文件,是對COM組件的打包。
導入類型庫的意義:
我們要使用某個COM組件,首先導入包含它的類型庫。這是讓客戶程序知道我們要使用的COM組件在計算機中的哪個位置。
知道了類型庫的位置,通過組件類的CLSID值,就可以知道組件類的位置,通過接口的IID就可以找到這個接口了。
類型庫的意義:
簡單點講,類型庫就是COM類的容器,里面包含了若干COM類。
ProgID:
ProgID是在定義COM類時為類起的別名,方便程序員記住。命名規則為:ProjectName.ClassName.VersionNumber,即:
工程名(類型庫名稱).類名(COM類名稱).(版本號)
ProgID是個字符串,能夠與其映射的CLSID相互轉化:
CLSIDFromProgID()、CLSIDFromProgIDEx()
由 ProgID 得到 CLSID。沒什么好說的,你自己都可以寫,查注冊表貝
ProgIDFromCLSID()
由 CLSID 得到 ProgID,調用者使用完成后要釋放 ProgID 的內存
ATL作用:
ATL專門用來生成COM組件的,編譯后生成dll文件或者exe文件。
com組件和普通的dll文件有什么區別呢?
com組件優點:1.語言無關性;2.便於升級擴展;3.有很好的繼承封裝多態特性,即面向對象能力強;4.完成進程間,分布式功能;5.接口調用,便於組織。