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

一、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)程序所使用。Visual C++2005是C++/CLI的实现。

二、什么是C++/CLI

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

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

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

① 优雅流畅的语法和文法–C++/CLI为C++开发人员书写托管代码提供了一种非常自然的感觉,并且它提供了非托管代码到托管代码的平滑过度。以前所谓的"双重底线"问题现在已经荡然无存。
② 一流的CLI支持–CLI特色,例如属性、碎片集合和属类得到了直接支持,此外,C++/CLI还准许将这些特色用于本地非托管的类。
③ 一流的C++类支持–C++特色,例如模板和析构函数对于拖管和非拖管类继续有效。实际上,C++/CLI是你可以"表面上"在栈或C++本地堆上声明一个.NET类型唯一的.NET语言。
④ 在.NET与C++之间的沟壑上架起了一座桥梁–C++开发人员在抨击BCL时不再象离开水的鱼。
⑤ C++/CLI编译器产生的可执行文件完全是可校验的。

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

可以简单的从它所包含的三部分内容来解释:
① ISO C++是C++/CLI对CLI扩展的基础,C++/CLI对以前的ISO C++部分完全进行了保留,完全兼容,所以ISO C++可以做的,现在C++/CLI仍然可以继续,那有人说这个就是ISO C++,那么我也告诉你是C++/CLI, 因为它是被编译为IL代码,这时我们可以用来开发游戏和图形处理软件等,但是如果是要开发系统或底层,这时需要将代码编译为本地代码,其实这时的C++/CLI就是ISO C++了;
② 对CLI的.NET实现的扩展,这部分我们可以充分地使用.NET所带来的优势,比如庞大的类库和高效的UI快速开发能力;
③ ISO C++和.NET的集成,通过这部分,更好地补充了以前的本地代码和.NET代码的交互的能力,降低的集成的难度,使得可以更加充分地利用各语言和开发人员的优势。

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

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

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

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

C++ CLI简介(什么是C++ CLI)的更多相关文章

  1. VC++ 学习笔记(三):摩登之路——C++/CLI简介

    在Windows上,除非我们必须得用C++来写界面,否则我会选择避免,避免学习和使用MFC.替代的方案是用C#来做界面,然后用C++/CLI来连接C#和Native C++.那么问题来了,C++/CL ...

  2. Apache Commons CLI 简介

    CLI 命令代码实现 命令行程序处理流程相对比较简单,主要流程为设定命令行参数 -> 解析输入参数 -> 使用输入的数据进行逻辑处理CLI 定义阶段 每一条命令行都必须定义一组参数,它们被 ...

  3. .Net Core CLI在CentOS7的安装及使用简介

    1. 安装libunwind cd /usr/local/src wget http://download.savannah.gnu.org/releases/libunwind/libunwind- ...

  4. 用C++/CLI搭建C++和C#之间的桥梁(一)—— 简介

    C#和C++是非常相似的两种语言,然而我们却常常将其用于两种不同的地方,C#得益于其简洁的语法和丰富的类库,常用来构建业务系统.C++则具有底层API的访问能力和拔尖的执行效率,往往用于访问底层模块和 ...

  5. php cli模式学习(PHP命令行模式)

    http://www.jb51.net/article/37796.htm php_cli模式简介  php-cli是php Command Line Interface的简称,如同它名字的意思,就是 ...

  6. Apache Commons CLI 开发命令行工具示例

    概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提 ...

  7. 托管C++、C++/CLI、CLR

    1.什么是托管C++? 在回答这个问题,首先要搞清楚什么是"托管"(Managed).托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完 ...

  8. 使用 Apache Commons CLI 开发命令行工具示例

    Apache Commons CLI 简介 Apache Commons CLI 是 Apache 下面的一个解析命令行输入的工具包,该工具包还提供了自动生成输出帮助文档的功能. Apache Com ...

  9. 使用 Apache Commons CLI 解析命令行参数示例

    很好的输入参数解析方法 ,转载记录下 转载在: https://www.cnblogs.com/onmyway20xx/p/7346709.html Apache Commons CLI 简介 Apa ...

随机推荐

  1. SECURECRT 连接锐捷交换机CONSOLE

    协议选择Serial,端口选择COM1.波特率设置为9600.RTS/CTS要把勾去掉(关闭流控功能)

  2. 高校表白App-团队冲刺第一天

    今天要做什么 今天要再次重新的好好学一下Activity的生命周期,简单的写一个Activity,熟悉Activity的线程. 遇到的问题 在点击事件发生时,在activity进行finish()后, ...

  3. File类与常用IO流第五章——IO字符流

    字符流,只能操作文本文件,不能操作图片.视频等非文本文件 字符输入流 java.io.Reader 字符输入流中一些共性的成员方法 int read():读取单个字符并返回. int read(cha ...

  4. MySQL8.0.26安装与卸载

    一.安装 1.官网下载 百度进入官网,学习用社区版够了,我下的是压缩版点这直达下载页 据说8.X版本性能优化,比5.7版本快2倍! 接着,不登录直接下载 2.创建配置 下载完后,建议解压到一个没有中文 ...

  5. 记一次 .NET 某云采购平台API 挂死分析

    一:背景 1. 讲故事 大概有两个月没写博客了,关注我的朋友应该知道我最近都把精力花在了星球,这两个月时间也陆陆续续的有朋友求助如何分析dump,有些朋友太客气了,给了大大的红包,哈哈,手里面也攒了1 ...

  6. 前端基础html(二)

    一.html的概念 1.概念:超文本标记语言. 2.超文本,超链接:超级不仅有文本,图片,还有音频,视频等. 3.html:作用:   显示服务器端的响应结果. 二.互联网三大基石 1.url:统一资 ...

  7. my.ini修改后启动失败

    修改之后ini文件后不要直接关闭在记事本里点击另存为,编码选择为ANSI编码格式,再保存就行了

  8. python批量修改图片名称

    import os class BatchRename(): def rename(self): # windows环境 """ os.rename() 方法用于命名文件 ...

  9. 2021零售商业智能(BI)的 8大好处

    零售业的商业智能现在比以往任何时候都更加重要.客户数据不仅可以用来击败竞争对手,还可以用来识别模式和行为,确定哪些产品和服务适合当下销售,以及如何瞄准新市场. 什么是零售业的商业智能? 商业智能是使用 ...

  10. Beautiful Soup4.4.0中文官方文档!最权威的参考---中文官方文档

    最好用的解析库Beautiful Soup 解析库-----中文官方文档 https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/