Win8探索之組件平台之路

來源:互聯網
上載者:User
什麼是組件平台,電腦產業一直在探索類似於工業化大生產流水線一樣的生產方式。及軟體可以以更小的組件形式組裝在一起。本文試圖探索一下一直到Win8時的路線。 

C語言是一門偉大的語言,在產生了UNIX以後,C&UNIX是天生的一對。當時或者直到今天

的一種組件萌芽的形式就是,以C的庫來封裝組件。一個一個的函數是隨後的螺絲釘。

 

C是偉大的,但C也是有缺陷的。它唯一一個解決不了的問題,就是複雜性。今天的軟體日益複雜,C老了,需要新鮮血液。物件導向是公認的複雜性的解決辦法。C++是號稱C的物件導向解決方案,但是C++解決了組件平台了嗎?不用回答,現實就可以回答。

 

業界曾經出現過以COM封裝的組件平台,也出現過以Java,.Net虛擬機器形式封裝的組件庫。對於作業系統,也出現過很多,比如微軟的COM,蘋果的以Objective-C為基礎組件平台(Cocoa),微軟有一段時間以為.Net可以成為組件平台,但當作業系統的效能成為一個問題,蘋果給它帶來更多壓力的時候,它又重啟組件平台探索,這就是Win8裡的WinRT以及C++/CX. 

C++/CX全稱是C++ Componenet Extension,也就是C++ + Component Extension。這個世界,

C是不可丟的,需要往上面不停的加東西。呵呵!

 

隨著深入的學習,發現Metro的組件類似於COM組件,也還是要在註冊表中註冊,我不玩了。

附張圖

 

 

 

 最後的補充

C++/CX的編譯,連結不同於C++的編譯與連結。編譯不採用標頭檔,而是類似於COM類型庫一樣,尋找winmd元資訊。連結也不同於C++,不採用符號連結。

C++/CX不能產生靜態庫,當然,C++的部分可以。產生的組件庫依賴註冊表,和以前的COM一樣。但是,不同於COM,所有介面繼承於IInspectable 

     typedef struct IInspectableVtbl

    {        BEGIN_INTERFACE                HRESULT ( STDMETHODCALLTYPE *QueryInterface )(             __RPC__in IInspectable * This,            /* [in] */ __RPC__in REFIID riid,            /* [annotation][iid_is][out] */             _COM_Outptr_  void **ppvObject);                ULONG ( STDMETHODCALLTYPE *AddRef )(             __RPC__in IInspectable * This);                ULONG ( STDMETHODCALLTYPE *Release )(             __RPC__in IInspectable * This);                HRESULT ( STDMETHODCALLTYPE *GetIids )(             __RPC__in IInspectable * This,            /* [out] */ __RPC__out ULONG *iidCount,            /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*iidCount) IID **iids);                HRESULT ( STDMETHODCALLTYPE *GetRuntimeClassName )(             __RPC__in IInspectable * This,            /* [out] */ __RPC__deref_out_opt HSTRING *className);                HRESULT ( STDMETHODCALLTYPE *GetTrustLevel )(             __RPC__in IInspectable * This,            /* [out] */ __RPC__out TrustLevel *trustLevel);                END_INTERFACE    } IInspectableVtbl;

 看似這裡許可權管理更嚴格,微軟似乎不想把C++/CX引出Metro外。亂,就一個字。還不如用Java或是.Net了。.Net本身是微軟的,而Google也因為Android用Java和Oracle打官司。蘋果不必說,其它平台似乎一律都是JavaScript.組件平台的路還在繼續。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.