C++/CLI简介(什么是C++/CLI) -------C++/CLI 编程系列一

来源:互联网 发布:pokemongo辅助软件ios 编辑:程序博客网 时间:2024/04/29 17:55

要知道C++/CLI是什么,首先知道什么是CLI

 

一、CLI简介

 

CLI:(Common Language Infrastructure,通用语言框架)提供了一套可执行代码和它所运行需要的虚拟执行环境的规范。更通俗的我们可以说它是一个虚拟平台,是操作系统和应用程序间的一层抽象。微软的.NET的基础CLRCommon Language Runtime,通用语言运行时)就是CLI的一个实例。

  

CLI主要的成部分有:CTSMetadataCLSVES

          CTSCommon Type System,通用型系):是CLI的基,它是一个范,定了所有CLI平台上可以定型的集合,所有基于CLI型都是CTS的一个子集,目前C++/CLICTS描述支持最好的高级语言。

          Metadata(元数据):用来描述和引用CTS型,元数据以一独立于任何言的形式存,正是元数据予了建自描述的能力。

          CLSCommon Language Specification,通用范)是用以确保所有CLI言能互操作的一组规则,它定了所有CLI言都必支持的一个最小功能集(一个CTS的子集)。CLI言可以选择自己CTS的一部分的映射,但是了确保不同言的交互,至少应该支持CLS所定的最小功能集。

          VESVirtual Execution System,虚拟执行系CLI程序提供了一个在各可能的平台上加行托管代的虚境,只是一个范,比如微momo就各有自己的实现.NETCLRJITGC应该属于此范

 

.NET Framework是微软对CLI的一个实现,当然也是目前最好的实现.NET Framework主要包含CLRBCLCLR(实时通用语言)是核心也即CLI实现BCL是一套通用的代码库,可以被所有的.NET言(C#, VB.NET, C++/CLI)程序所使用。Visual C++2005C++/CLI的实现。

 

二、什么是C++/CLI

 

 

 

 

 

 

 

其实C++/CLI除了包含ISOC++CLI扩展,它之所以强大的更重要的原因就是它实现了ISOC++.NET的无缝连接。C++/CLI支持对本地ISOC++编程和.NET托管编程的无缝集成,不是简单的混合,不仅能够像.NET调用windows API一样通过P/Invoke来实现函数互调,而且可以实现类型class级和ISOC++.NET类库的相互使用,更强的是能够实现类型的混合。为了实现无缝连接,绝大多数的以前的ISO C++代码编译后将得到托管代码,部分不能编译为托管IL的采用P/Invoke调用实现。代码托管,但是数据并不托管,原来ISOC++中本地堆内的数据仍位于本地堆中。

C++/CLICLI:Common Language Infrastructure)是一门用来代替C++托管扩展(下文使用MC++指代)新的语言规范。重新简化了C++托管扩展的语法,提供了更好的代码可读性。和微软.NET的其他语言一样,微软向ECMA提交了C++/CLI的标准。C++/CLI现在可以在Visual C++ 2005上开发。C++/CLI的部分特性已经申请了专利。

 

三、C++/CLI给我们提供了什么?

 

      优雅流畅的语法和文法--C++/CLIC++开发人员书写托管代码提供了一种非常自然的感觉,并且它提供了非托管代码到托管代码的平滑过度。以前所谓的"双重底线"问题现在已经荡然无存。

      一流的CLI支持--CLI特色,例如属性、碎片集合和属类得到了直接支持,此外,C++/CLI还准许将这些特色用于本地非托管的类。

      一流的C++类支持--C++特色,例如模板和析构函数对于拖管和非拖管类继续有效。实际上,C++/CLI是你可以"表面上"在栈或C++本地堆上声明一个.NET类型唯一的.NET语言。

      .NETC++之间的沟壑上架起了一座桥梁--C++开发人员在抨击BCL时不再象离开水的鱼。

      C++/CLI编译器产生的可执行文件完全是可校验的。

 

 

四、使用C++/CLI我们可以做什么

 

可以简单的从它所包含的三部分内容来解释:

      ISOC++C++/CLICLI扩展的基础,C++/CLI对以前的ISOC++部分完全进行了保留,完全兼容,所以ISOC++可以做的,现在C++/CLI仍然可以继续,那有人说这个就是ISOC++,那么我也告诉你是C++/CLI, 因为它是被编译为IL代码,这时我们可以用来开发游戏和图形处理软件等,但是如果是要开发系统或底层,这时需要将代码编译为本地代码,其实这时的C++/CLI就是ISOC++了;

      CLI.NET实现的扩展,这部分我们可以充分地使用.NET所带来的优势,比如庞大的类库和高效的UI快速开发能力;

      ISOC++.NET的集成,通过这部分,更好地补充了以前的本地代码和.NET代码的交互的能力,降低的集成的难度,使得可以更加充分地利用各语言和开发人员的优势。

 

五、学习C++/CLI所需要的基础

 

    C++/CLI包含了ISOC++和对其的.NET的扩展,看这两部分,一个是ISOC++,另一个是在.NET的扩展,可见基础就是ISOC++,这也正是我这里指出的本系列所要求的基础。

 

前面虽然提到C++/CLI包含ISOC++和其扩展,但是考虑到ISOC++是个很大的内容和已经存在有大量的书籍介绍,所以本系列着重介绍ISOC++.NET的扩展部分。

 

C++/CLI是静态C++对象模型到CLI的动态组件对象编程模型的捆绑,或者说C++/CLIISOC++.NET的扩展,是ISOC++.NET的无缝结合。简而言之,它就是你如何用C++.NET中编程,而不是C#Visual Basic.NET