Win8探索之组件平台之路

什么是组件平台,计算机产业一直在探索类似于工业化大生产流水线一样的生产方式。
及软件可以以更小的组件形式组装在一起。本文试图探索一下一直到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.组件平台的路还在继续。 

posted @ 2012-06-06 11:50  Marvin  阅读(550)  评论(0编辑  收藏  举报