當前位置:成語大全網 - 新華字典 - 請問:主板上的COM有什麽作用?

請問:主板上的COM有什麽作用?

Com國際頂級域名

Com也是國際頂級域名。Com,company的縮寫,是最常用的頂級域名,表示壹個商業網站。

[編輯本段]COM組件

什麽是COM組件

COM是組件對象模型的縮寫。

用戶需要什麽樣的軟件產品?這是個選擇題,但是高效和健壯肯定會選。壹個軟件開發者怎麽做才能滿足用戶的需求?需要確保在升級應用程序時不會破壞與以前版本的向後兼容性。有必要獨立於特定的操作系統來擴展系統服務。面向對象編程顯然是壹個革命性的變化。利用面向對象的設計方法,我們可以很容易地把要解決的問題抽象成各種類,並隱藏內部動作,只提供壹些接口。但這並沒有完全解決我們的問題。昨天在《程序員》雜誌上看到現在是後OO時代,那麽OO之後會是什麽呢?它應該是面向組件的。

雷神剛剛看完《COM技術內幕》這本書,整理了壹個FAQ,供大家學習這本書時參考。

這是第壹部分,包括前三章。

FAQ1:什麽是COM組件?[第壹章]

FAQ2:組件不是...?[第壹章]

FAQ3:什麽是接口?[第二章]

FAQ4:界面的作用是什麽?[第二章]

FAQ5:什麽是我不知道的?[第三章]

FAQ6:QueryInterface的作用是什麽?[第三章]

FAQ7:QueryInterface函數的實現規則是什麽?[第三章]

常見問題8:查詢界面是什麽樣子的?[第三章]

FAQ9:QueryInterface函數的參數IID是什麽?[第三章]

FAQ10:我什麽時候需要創建新的COM組件版本?[第三章]

問題:

什麽是COM組件?

回答:

COM組件由以WIN32動態鏈接庫(DLL)或可執行文件(EXE)形式發布的可執行代碼組成。

com組件是按照COM規範編寫的。

COM組件是小的二進制可執行文件。

COM組件可以為應用程序、操作系統和其他組件提供服務。

自定義COM組件可以在運行時與其他組件連接,形成壹個應用程序。

COM組件可以動態地插入或卸載應用程序。

COM組件必須動態鏈接。

COM組件必須隱藏(封裝)它們的內部實現細節。

COM組件必須隱藏它們實現的語言。

COM組件必須以二進制形式發布。

COM組件必須能夠在不幹擾現有用戶的情況下升級。

COM組件可以透明地在網絡上重新定位。

COM組件以標準的方式宣布它們的存在。

問題:

該組件不是...?

回答:

COM組件不是壹種計算機語言。

COM組件不是dll,只是用dll給組件提供動態鏈接的能力。

COM組件不是API函數集。

COM組件不是壹個類。

問題:

什麽是接口?

回答:

接口提供兩個不同對象之間的連接。

計算機程序由壹組函數連接,這些函數定義了程序不同部分的接口。

DLL的接口就是它輸出的函數。

C++類的接口就是這個類的成員函數集。

COM中的接口是由組件實現並提供給客戶的壹組功能。

在COM中,接口是包含函數指針數組的內存結構,數組元素是由組件實現的函數地址。

問題:

接口的作用是什麽?

回答:

對於組件,如何將它們連接起來形成壹個應用程序需要接口。

在COM中,接口就是壹切。對客戶來說,組件就是接口集,客戶只能通過接口與組件打交道。

這表明該接口可以保護系統免受外部變化的影響。這就是包裝的體現。

接口實現使用戶能夠以相同的方式處理不同的組件。這就是多態性的體現。

問題:

接口怎麽實現?

回答:

COM接口在C++中用純抽象基類實現。

壹個COM組件可以支持多個接口。

壹個C++類可以使用多重繼承來實現壹個支持多重接口的組件。

組件可以支持任意數量的接口。

接口應該是不變的。升級組件時,不應修改原有接口,而應添加新接口。

應該仔細設計實現接口,以便它可以支持各種實現。

問題:

我知道什麽?

回答:

IUnKnown是壹個接口。

所有COM接口都繼承IUnKnown。

IUnKnown是在WIN32 SDK的UNKNWN頭文件中定義的。

///I unknown的定義

接口未知

{

虛擬HRESULT __stdcall QueryInterface(常量IID & amp;iid,void * * PPV)= 0;

虛擬ULONG _ _ stdcall AddRef()= 0;

虛擬ULONG _ _ stdcall Release()= 0;

}

問題:

QueryInterface的作用是什麽?

回答:

QueryInterface是IUnKnown的成員函數,客戶可以通過它查詢壹個組件是否支持特定的接口。

QueryInterface函數返回壹個指向組件支持的接口的指針。

如果QueryInterface函數沒有找到組件支持的接口,則返回指針為空。

QueryInterface函數可以用if…then…else語句、數組、哈希表、樹來實現。

QueryInterface函數不能使用case語句,因為QueryInterface函數返回的是HRESULT結構而不是數字。

QueryInterface也是壹種解封組件版本的機制。這種機制使新舊版本的組件能夠互操作。

問題:

QueryInterface函數的實現規則是什麽?

回答:

QueryInterface返回的IUnKnown指針總是相同的。

如果壹個客戶得到了壹個接口,它總是可以得到的。

客戶可以再次獲得他們已經擁有的界面。

客戶可以返回到開始界面。

如果在壹個接口上可以獲得壹個特定的接口,那麽這個接口可以從任何接口上獲得。

問題:

QueryInterface函數的參數IID是什麽?

回答:

它是壹個結構,壹個接口標識符結構。

IID確定客戶需要的接口。

每個接口都有唯壹的接口標識符。因此,與IID相對應的界面永遠不會改變。

接口IID決定COM組件的版本。

不同的接口有不同的id,包括不同版本的接口。

問題:

我什麽時候需要創建新版本的COM組件?

回答:

為現有接口指定新ID時,至少應滿足以下條件之壹。

當界面中的功能數量發生變化時。

界面中功能的順序已經改變。

接口中函數的參數已經改變。

接口中函數參數的順序已經改變。

接口中函數的參數類型已更改。

接口中函數的返回值發生變化。

接口中函數的返回值類型已更改。

界面中函數參數的含義發生變化。

界面中功能的含義發生了變化。

簡單地說,COM是壹種跨應用程序和語言享受二進制代碼的方式。與C++不同,它提倡源代碼重用。ATL就是壹個很好的例子。源碼級復用雖然好,但是只能用在C++裏。也帶來了名稱沖突的可能,更不用說代碼的不斷復制和重用,導致項目的膨脹和臃腫。

Windows使用dll來享受二進制級別的代碼。這也是運行Windows程序的關鍵——重用kernel32.dll、user32.dll等。但dll是為C接口編寫的,只能由C或理解C調用規範的語言使用。編程語言負責實現代碼,而不是dll本身。在這種情況下,dll的使用受到限制。

MFC引入了另壹種MFC擴展dll二進制* * *共享機制。但它的用途仍然有限——只能在MFC程序中使用。

COM通過定義二進制標準來解決這些問題,即COM明確指出二進制模塊(dll和exe)必須編譯成與指定的結構相匹配。該標準還明確規定了如何在內存中組織COM對象。COM定義的二進制標準也必須獨立於任何編程語言(比如C++中的命名修飾)。壹旦滿足這些條件,就可以從任何編程語言輕松訪問這些模塊。編譯器負責生成的二進制代碼與標準的兼容性。這使得後來的人更容易使用這些二進制代碼。

在內存中,這種標準形式的COM對象偶爾會在C++虛函數中使用,所以這就是為什麽很多COM代碼使用C++的原因。但是請記住,編寫模塊的語言是不相關的,因為生成的二進制代碼在所有語言中都是可用的。

此外,COM不是Win32獨有的。理論上可以移植到Unix或者其他操作系統上。但是好像沒聽說過Windows之外的COM。

[編輯本段] com英文版

1表示* * *相同或相同,意為“* * *相同、相互、在壹起”;

此外,還有col、cor、co、syn、sym、syl、syr另壹個超級表* * *與對方;Homo表壹樣,壹樣;因為表是相同和相似的;Iso表等。

2.它意味著加強或擴展意思;

類似的前綴有:be,a,ac,af,en,em,col,cor。

com-和con-前綴的意思是“* * *在壹起”。如連接、合並、戰鬥等。

根據在英英詞典中查找com的意思,它給出的解釋是,當它以。com,就是業務相關的意思。

根據我後來在網上找到的詞源中的解釋,com是* * *的意思,是co和con的同義詞。