1. 什么是C++/CLI?(又称Managed C++,托管C++)
托管(Managed) 是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,通用语言运行时是.NET 框架应用程序的执行引挚。它提供了许多服务,其中包括:代码管理(装入和执行)、类型安全性验证、元数据(高级类型信息)访问、为管理对象管理内存、管理代码,COM对象和预生成的DLLs(非管理代码和数据)的交互操作性、对开发人员服务的支持等等。
也就是说,托管C++意味着,我们的代码可以被CLR所管理,并能开发出具有最新特性如垃圾自动收集、程序间相互访问等的.NET框架应用程序。
可见,Managed C++(下称MC++)是有别于原来的C++(下称VC++)的一种新的而且十分特殊的.NET语言。
MC++的特殊之处在于Micorsoft为MC++提供了一种称之为“随心而动-it just works”的Interop机制,后称“Interop技术”。即对程序中的每一个本地方法,MC++编译器同时生成一个托管和非托管进入点,它们中只有一个是真正方法的实现,另一个则是转发器,可进行相应的转换和必要的调度。托管进入点通常是真正方法的实现,除非代码不能解释为MSIL或开发者使用“#pragma unmanaged”强制指定进入点的实现为本地机器码。当一个IJW转发器起作用时——例如转发到本地代码中,编译器提供转换的实现,并且通过偏移或IAT(Import Address Table)调用实际的实现代码;
MC++是随VS 2003问世的,但其前进道路却不顺利,VS2003版的MC++语法十分笨拙不受程序员的欢迎,之后VC++小组又重新编写了较为优雅的新语法,称为"C++/CLI",但前后两种语法的问世,也造成了一定的混乱,这篇文章的主旨之一,就是澄清2003版和C++/CLI之间的语法区别。
MC++提供了托管代码和非托管代码之间的桥梁,如果你的工作不涉及托管环境,则可以直接忽略MC++的语法,只关注VC++。对于工作在托管环境的程序员,MC++提供了一些有趣场景:
1. 提供了原有代码向托管环境的迁移手段,比如我正在做的项目,就是将Webkit迁移到.NET平台上来。而最有名的案例当属DOOM小组,他们在三天内完成了DOOM.NET!
2. 保护商业机密,你可以将核心代码置于VC++之中编译成非托管的二进制代码而不被人反编译。
3. 提供底层硬件访问机制,等等。
4. Windows下各种SDK提供了丰富的类库(lib),足以取代许多多余的框架。
二、MC++的语法演进
我们至今能可以看到2003版的MC++的语法,在其托管扩展中定义垃圾回收类、属性等等常用到的双下划线关键字:
//老旧的MC++语法
public __gc __sealed class Student
{
private:
double m_grade;
String* m_name;
public:
__property double get_Grade() { return m_grade; }
__property void set_Grade(double newGrade) { m_grade = newGrade; }
__property String* get_Name() { return m_name; }
__property void set_Name(String* newName) { m_name = newName; }
}
现在这些为更接近C#的语法所取代,因此强烈建议使用MC++的程序员将代码迁移到新的C++/CLI语法上来。上面的例子在C++/CLI的写法为:
//新的C++/CLI语法
public ref class Student sealed
{
private:
double m_grade;
public:
// 标准属性语法
property double Grade
{
double get() { return m_grade; }
void set(double newGrade) { m_grade = newGrade; }
}
//其他属性
property String^ Name;
}
在新语法中的类型被声明为“什么的类”,前置的形容词描述了你将创建什么样的类,如下所示:
class N { /*…*/ }; //本地类型
/*-----------CLR的类型------------*/
ref class R { /*…*/ }; // CLR引用类型
value class V { /*…*/ }; // CLR值类型
interface class I { /*…*/ }; // CLR界面接口类型
enum class E { /*…*/ }; // CLR枚举类型
我们将逐一介绍新的C++/CLI语法,并附带如何将原来的MC++语法迁移到C++/CLI上。
分享到:
相关推荐
C++/CLI教程C++/CLI教程C++/CLI教程C++/CLI教程C++/CLI教程C++/CLI教程
Instead, youll learn how to write .NET applications using C++/CLI. <br>This book is based on its highly successful predecessor, and bridges the gap between classic C++ and C++/CLI. Furthermore, ...
什么是 C++/CLI 个人感觉将其看作是位于静态程序设计和动态程序设计之间的一座桥梁。C++ 既C++ 编程语言编程语言; CLI 即通用语言基础构造( Common Language Infrastructure ),这是一个支持动态组件编程模型的...
C++/CLI入门实例 C++/CLI封装并被C#调用
In a very similar way, C++/CLI is layered on top of C++. C++/CLI provides a high degree of source code compatibility with C++. As a consequence, the following code is valid if you build the program ...
[Microsoft Press] Visual C++/CLI 从入门到精通 (英文版) [Microsoft Press] Microsoft Visual C++/CLI Step by Step (E-Book) ☆ 出版信息:☆ [作者信息] Julian Templeman [出版机构] Microsoft Press ...
Microsoft Visual C++/CLI Step by Step (pdf + ePub) Publisher: Microsoft Press (August 2, 2013) Language: English ISBN-10: 0735675171 ISBN-13: 978-0735675179 Your hands-on guide to Visual C++/CLI ...
ebook of expert C++/CLI
Visual C++/CLI从入门到精通 扫描版
Foundations of C++/CLI: The Visual C++ Language for .NET 3.5 introduces C++/CLI, Microsoft’s extensions to the C++ syntax that allow you to target the common language runtime, the key to the heart of...
文件太大,共分为两部分,记得两个资源一起下下来再解压。现在CSDN最低分值为1...使用C++/CLI编写OSG的初步入门例子。可以编译成dll文件然后在C#中调用,从而使用C#在OSG上进行开发。也可以直接使用C++/CLI进行开发。
C++/CLI in Action source code
"C++/CLI Primer: For .NET Development" English | ISBN: 1484223667 | 2016 | 83 pages | PDF | 8 MB Enter a world of hardcore back-end, server-side enterprise programming on the .NET platform. This ...
Visual C++ 2008 用 C++/CLI 开发 ASP.NET Web Application 和 Web Service 的模板,可安装!有安装说明。
英文原版的c++/cli 语言规范,如果喜欢看英文资料的朋友不妨下载了看看,省去一些翻译的不贴切的地方
这是一本c++/cli语言的书,对初学者非常有用,非常清楚,使英文版的
自己辛苦搜集的网上关于c++/cli编程资料(word,60页,中文)版权规原作者哈,想了解c++/cli编程的绝好材料
利用STK X将STK功能嵌入到C++/CLI创建的程序中,用到了Microsoft Visual Studio2005。
把NativeC++用的DirectX嵌入到.Net做的界面中去 详见 http://blog.csdn.net/xoyojank/archive/2008/11/02/3207685.aspx
什么是C++/CLI 如何学习C++/CLI 怎样将C++/CLI 映射到CTS