zoukankan      html  css  js  c++  java
  • 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.组件平台的路还在继续。 

  • 相关阅读:
    关于SVM数学细节逻辑的个人理解(二):从基本形式转化为对偶问题
    关于SVM数学细节逻辑的个人理解(三) :SMO算法理解
    [2017BUAA软工]第0次个人作业
    关于SVM数学细节逻辑的个人理解(一) :得到最大间隔分类器的基本形式
    个人作业Week 1
    [2017BUAA软工]第一次个人项目 数独的生成与求解
    windows下安装webgoat
    .net 的StringComparison
    飞信登录过程的协议分析 (TCP直连方式)
    C#的String.Split方法
  • 原文地址:https://www.cnblogs.com/Chrome/p/2538013.html
Copyright © 2011-2022 走看看