C++/CLI简介

2015-05-05 (2015-05-05更新)

  • C++/CLI(Common Language Infrastructure,通用语言框架):是静态C++对象模型到CLI的动态组件对象编程模型的捆绑;
  • 或者说C++/CLI是ISOC++在.NET的扩展,是ISOC++和.NET的无缝结合。
  • 简而言之,C++/CLI就是用C++在.NET中编程。
  • C++/CLI在.net CLR(通用语言运行时)的托管下运行。

CLI简介

CLI:(Common Language Infrastructure,通用语言框架)提供了一套可执行代码和它所运行需要的虚拟执行环境的规范。微软的.NET的基础CLR(Common Language Runtime,通用语言运行时)就是CLI的一个实例。

CLI主要的组成部分有:CTS,Metadata,CLS和VES。

  • CTS(Common Type System,通用类型系统):是CLI的基础,它是一个类型规范,定义了所有CLI平台上可以定义的类型的集合,所有基于CLI的语言类型都是CTS的一个子集,目前C++/CLI是对CTS描述支持最好的高级语言。
  • Metadata(元数据):用来描述和引用CTS定义的类型,元数据以一种独立于任何语言的形式存储,正是元数据赋予了组建自描述的能力。
  • CLS(Common Language Specification,通用语言规范):是用以确保所有CLI语言能够互操作的一组规则,它定义了所有CLI语言都必须支持的一个最小功能集(一个CTS的子集)。各CLI语言可以选择自己对CTS的一部分的映射,但是为了确保不同语言的交互,至少应该支持CLS所定义的最小功能集。
  • VES(Virtual Execution System,虚拟执行系统):为CLI程序提供了一个在各种可能的平台上加载和执行托管代码的虚拟机环境,只是一个规范,比如微软和momo就各有自己的实现。.NET的CLR的JIT和GC应该属于此范围。

.NET Framework是微软对CLI的一个实现。.NET Framework主要包含CLR和BCL

  • CLR(实时通用语言)是核心也即CLI的实现。
  • BCL是一套通用的代码库,可以被所有的.NET语言(C#, VB.NET, C++/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++/CLI(CLI:Common Language Infrastructure)是一门用来代替C++托管扩展(MC++)新的语言规范。重新简化了C++托管扩展的语法,提供了更好的代码可读性。和微软.NET的其他语言一样,微软向ECMA提交了C++/CLI的标准。

C++/CLI 学习基础

C++/CLI包含了ISOC++和对其的.NET的扩展两部分

  • ISOC++:ISOC++是基础,学习C++/CLI需要首先学习ISOC++
  • .NET的扩展:CLI的核心。
Fork me on GitHub