javascript中COM對象指的是什么

蝸牛 互聯網技術資訊 2022-10-16 5 0

這篇文章主要介紹了javascript中COM對象指的是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇javascript中COM對象指的是什么文章都會有所收獲,下面我們一起來看看吧。

COM對象是指“組件對象模型對象”,是一個使用COM規格的可以重復使用的軟件組件;使用COM規格可以確保COM對象很好的工作,并且很容易的結合到你的應用程序中。COM對象一般用動態連接庫(DLL)實現;和普通的DLL一樣,COM對象暴露一些方法,用戶的應用程序能夠呼叫它,以便完成任何支持的操作。

本教程操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

什么是COM對象?

組件對象模型(COM)對象是一個使用COM規格的可以重復使用的軟件組件。使用COM規格可以確保COM對象很好的工作,并且很容易的結合到你的應用程序中。事實上,COM基本相當于一個黑匣子,這個黑匣子能為你的應用程序完成很多的工作。

COM對象一般用動態連接庫(DLL)實現。和普通的DLL一樣,COM對象暴露一些方法,你的應用程序能夠呼叫它,以便完成任何支持的操作。應用程序與COM對象的相互作用有點兒像應用程序與C++對象之間的相互作用,但他們之間又有一些明顯的不同。

  • COM對象實施了精確的封裝。你不能簡單的創建一個對象和任意呼叫它的公共方法。一個COM對象的公共方法被放入一個或更多的接口組中。對于方法的使用,你必須創建一個COM對象,并且從這個COM對象中獲得這個COM對象的一個適當的接口。例如: IDirect3DCubeTexture8接口中包含一個使你能夠處理立方體構架資源的方法。不屬于這個接口的任何方法都是不能夠訪問的。

  • COM對象的創建不同與C++對象的創建。有幾種方法可以創建COM對象,但都涉及到了COM-specific 技術。微軟的DirectX應用程序接口(API)包含了用于創建大多數DirectX對象的各種各樣的幫助函數和方法。

  • 你必須用COM_specific 技術控制COM對象的壽命。

  • COM對象不需要被顯示的調入。COM對象被包含在一個DLL中。然而,在你使用這個COM對象的時候,不需要顯示的調入DLL或著顯示調入靜態接庫。每一個COM對象有一個用來創建這個對象的唯一的注冊ID. ?COM會自動的調入正確的DLL.

  • COM是二進制規格的。COM對象可以從各種的各樣的語言寫入和訪問。你不需要知道關于COM對象源碼的任何事情。例如:Microsofe Visual Bisice 應用程序日常用COM對象寫入C++ .

對象和接口

明白對象和接口之間的區別是很重要的。偶然的用法是, 有的時候一個對象的名字被引用為主要接口的名字。然而,嚴格的說,這兩個條件是不能互換的。

  • ▲一個COM對象能夠暴露任意數量的接口。例如:所有的COM對象必須暴露IUnknown接口,它們一般至少暴露一個附加的接口,也可能更多。為了使用這些特殊的方法,你不僅要創建COM對象,而且還要獲取正確的接口指針。

  • ▲很多的對象可能暴露相同的接口。一個接口是一組能夠執行指定操作的方法。接口的定義規定了方法的語法和他們功能。支持特殊操作的任何一個COM對象都暴露了一個適當的接口。有一些接口是高度專門化的,并且它們只被一個單一的對象暴露。其他多數情況下是被多個對象暴露的。一個很特殊的情況的是IUnknown接口必須被每一個COM對象暴露。

附注:假如一個對象暴露一個接口,它必須在接口中定義每一個支持的方法。換句話說,你能夠呼叫的任何方法都要確信它是存在的。然而,從一個對象到另一個對象,方法實現的細節是能夠改變的。例如:不同的對象可能用不同的算法得到最后的結果。有時候,一個對象暴露一個舊的接口,僅僅需要支持方法的子集。你仍然能夠成功的呼叫余下的其它方法,但是,他們將返回E_NOTIMPL。

COM標準要求一個接口一旦發行,它的定義便不能再改變。你不能再這個已經存在的接口中添加新的方法。你必須重新創建一個新的接口。通常一般的做法是在下一代接口中包含舊接口的所有方法,然后再添加上任何新的方法。

一個接口有幾代這是很常見的。通常,他們的實質是一樣的, 但是他們的細節不同。通常,一個對象能夠暴露每一代的接口。這樣做允許較老的程序繼續使用對象的較老的接口,同樣新的程序也能發揮新接口的特性。通常,接口家族有相同的名字,在名字的后面加上用于標示第幾代的整數。例如:假如原始接口的名字為IMyInterface, 那么下兩代的接口被命名為IMyInterface2和IMyInterface3。整數標示一般用directx的版本號。

GUIDS

全局唯一標示符(GUIDS)是COM程序模式的一個關鍵的部分。最基本的原則,GUIDS是一個128位的結構。然而,GUIDS的創建方式能夠保證任何的兩個GUIDS都是不相同的。COM廣泛的使用GUIDS有兩個主要的目的:

1、為了唯一標示一個特定的COM對象。
? ? 2、為了唯一標示一個特定的COM接口。

返回值(HRESULT)

所有的COM方法返回一個名叫HRESULT的32位值。對于大多數方法,HRESULT 實際上是一個包含了兩部分信息的結構。

1、這個方法是否成功或失敗。
? ? 2、輸出關于方法支持的操作的詳細信息。

一些方法返回的HRESULT的值是在Winerror.h中進了定義的。方法返回的HRESULT值也可以是用戶專門的一些信息。這些值通常會在方法的參考頁中被驗證。

事實上,COM對象的方法調用能夠返回各種各樣的表示調用成功或失敗的代碼,這意味著你必須要很小心的測試其返回值。例如:假如一個方法調用的返回值是
S_OK,這表明這個方法調用成功,如果返回值時S_FAIL,表明調用失敗,當然,方法調用也可能返回其他的標識調用成功或者失敗的代碼。下面的代碼段舉例說明對代碼進行這樣的簡單的測試是不安全的。代碼中hr的值時該方法調用的返回值:

????if(?hr?==?E_FAIL?)
?????{
????????//Handle?the?failure
?????}
?????else
?????{
????????//Handle?the?success
?????}

如果這段代碼只返回E_FAIL,這個代碼段能夠很好的工作。然而,事實不是這樣,這個方法調用還有可能返回其他的值,例如:E_NOTIMPL, E_INVALIDARG.如果代碼返回這些值,這個代碼段沒有對其進行處理,默認會標識程序執行正常,然而實際程序是出現錯誤的。

如果你想知道關于方法調用的更詳細的信息,你必須測試每一個相關的返回值。然而,你也許只想知道這個方法調用是否成功。有一種很好的方法可以讓你測試方法調用是否成功,就是把方法的返回值傳遞給下面的兩個宏,他們在winerror.h文件中定義。

1、宏SUCCEEDED 返回TRUE表明調用成功,返回FALSE表明調用失敗。
? ?2、宏FAILED 返回TRUE 表明調用失敗,返回FALSE表明調用成功。

你可以用FAILED宏來修改一下前面的代碼段。

????if(?FAILED(hr)?)
????{?
???????//Handle?the?failure.
????}
????else
????{
???????//Handle?the?success.
????}

上面的代碼段對E_NOTIMPL 和 E_INVALIDARG的錯誤進行了處理。

雖然大部分的方法的返回值HRESULT是一個結構值,但有少數的方法的返回值HRESULT是一個簡單的整數值。這就隱含著返回整數值的這些方法總是能夠調用成功。假如你將這種類型的返回值傳遞給SUCCESS宏,這個宏將總是返回TRUE。一個常見的例子是:IUnkoown::Release 方法。這個方法的作用是釋放(減少)一個對象的使用計數,并返回對象的當前使用計數。使用計數用來標識對象的存在壽命。

指針的地址

假如你看到過一些COM方法的參考頁面,你可能遇到過像下面的這樣的一些情況:

???HRESULT?CreateDevice(
??????.?
??????.
??????.
??????IDirect3DDevice8?**ppReturnedDeviceInterface
??????)

通常,任何一個c 或者c ++開發者對指針都很熟悉,COM通常用一個附加的間接標準。這個標準是:在兩個星號(**)后面緊跟著類型說明和帶有典型"pp"前綴的變量的名字來標識。在前面的例子中,ppReturnedDeviceInterface參數是一個指向IDirect3DDevice8接口的指針的地址。
?
? ?和c++不一樣,你不能直接訪問COM對象的方法,取而代之的是,你必須獲得一個能夠暴露方法的一個接口的指針。調用對象接口的方法的語法和用指針調用c++方法的語法是一樣的。例如:調用IMyTnterface::DoSomething 的方法,你只需使用下面的語法就行了。

???IMyInterfance?*pMyTface;
???.
???.
???.
???pMyIface->DoSomething(...)?;

對于COM對象接口的指針來說,你不能直接創建一個指向接口的指針。你必須呼叫一個或多個其他的方法來得到這個指針。例如:前面提到的CreateDevice方法。

通過這個方法得到接口的指針,你需要聲明一個變量,用來指向你所請求的接口。把這個變量的地址傳遞給CreateDevice方法,換句話說,你必須給這個方法傳遞一個變量的地址。當這個方法返回的時候,這個變量將指向你所請求的接口,并且你能夠通過這個指針來訪問這個接口的其方法。

關于“javascript中COM對象指的是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“javascript中COM對象指的是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注蝸牛博客行業資訊頻道。

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:niceseo99@gmail.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

評論

日本韩欧美一级A片在线观看