C++ CLI简介(什么是C++ CLI)
要知道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)的更多相关文章
- VC++ 学习笔记(三):摩登之路——C++/CLI简介
在Windows上,除非我们必须得用C++来写界面,否则我会选择避免,避免学习和使用MFC.替代的方案是用C#来做界面,然后用C++/CLI来连接C#和Native C++.那么问题来了,C++/CL ...
- Apache Commons CLI 简介
CLI 命令代码实现 命令行程序处理流程相对比较简单,主要流程为设定命令行参数 -> 解析输入参数 -> 使用输入的数据进行逻辑处理CLI 定义阶段 每一条命令行都必须定义一组参数,它们被 ...
- .Net Core CLI在CentOS7的安装及使用简介
1. 安装libunwind cd /usr/local/src wget http://download.savannah.gnu.org/releases/libunwind/libunwind- ...
- 用C++/CLI搭建C++和C#之间的桥梁(一)—— 简介
C#和C++是非常相似的两种语言,然而我们却常常将其用于两种不同的地方,C#得益于其简洁的语法和丰富的类库,常用来构建业务系统.C++则具有底层API的访问能力和拔尖的执行效率,往往用于访问底层模块和 ...
- php cli模式学习(PHP命令行模式)
http://www.jb51.net/article/37796.htm php_cli模式简介 php-cli是php Command Line Interface的简称,如同它名字的意思,就是 ...
- Apache Commons CLI 开发命令行工具示例
概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提 ...
- 托管C++、C++/CLI、CLR
1.什么是托管C++? 在回答这个问题,首先要搞清楚什么是"托管"(Managed).托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完 ...
- 使用 Apache Commons CLI 开发命令行工具示例
Apache Commons CLI 简介 Apache Commons CLI 是 Apache 下面的一个解析命令行输入的工具包,该工具包还提供了自动生成输出帮助文档的功能. Apache Com ...
- 使用 Apache Commons CLI 解析命令行参数示例
很好的输入参数解析方法 ,转载记录下 转载在: https://www.cnblogs.com/onmyway20xx/p/7346709.html Apache Commons CLI 简介 Apa ...
随机推荐
- PYTHON 当前.PY文件名不能与引入的模块同名
当前文件名:sqlite3.py 文件引入import sqlite3 运行会出错,因为调用sqlite3的方法首先从当前文件找方法,当然找不到,所以会报错了
- 用Python分析下王小波与李银河写情书最爱用哪些词
作家王小波其实也是我国最早期的程序员,突发奇想,王小波写情书最喜欢用哪些词呢?用Python词云分析下! 直接上代码吧,有注释很好理解.输出的图片设置的比较大,所以运行的比较慢,可以适当把图片尺寸改小 ...
- 前端开发入门到进阶第三集【获取cookie然后单点登录后重定向】
/* var token ;//https://blog.csdn.net/qq_29207823/article/details/81745757 if( $.cookie('BBK_TOKEN') ...
- 微信小程序云开发-云存储-上传、下载、打开文件文件(word/excel/ppt/pdf)一步到位
一.wxml文件 <!-- 上传.下载.打开文件一步执行 --> <view class="handle"> <button bindtap=&quo ...
- Hive开发要知道数据仓库的四个层次设计
数据仓库:数据仓库全面接收源系统数据,ETL进程对数据进行规范化.验证.清洗,并最终装载进入数据集市,通过数据集市支持系统进行数据查询.分析,整个数据仓库包含四大层次. 1.数据仓库的四个操作 ...
- 基于小熊派Hi3861鸿蒙开发的IoT物联网学习【二】
HarmonyOS内核开发-信号量开发案例学习记录 一.LiteOS里面的任务管理介绍: 任务状态通常分为以下四种: 就绪(Ready):该任务在就绪列表中,只等待CPU. 运行(Running) ...
- 第四篇--Beyond Compare4 试用期30天后
30天后删除BCUnrar.dll这个文件,继续使用30天.还有就是注册表中regedit-->HEKY_CURRENT_USER-->Software-->Scooter Soft ...
- linux下快速安装pyenv管理多版本python
起因 一直服务器python项目都是放docker跑,这次为了测试,不得不在宿主机跑,就必须安装python3.7,但是ubuntu16.04下有点麻烦 尝试 源码安装,懒,算了,也不想污染服务器环境 ...
- Capture One 21 Pro 14.0.2.36中文版安装教程
Capture One 21 Pro 14.0.2.36 for windows是一款由丹麦PHASE ONE飞思公司推出的.非常专业强大的图像处理编辑工具. 下载 Capture One 21 Pr ...
- Tomcat 性能监控与优化
JMX JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架.JMX是一套标准的 代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现 ...