`

C++ /CLI 初讨论之一

阅读更多
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++ Common Language Infrastructure)编程语言的教程。C++/CLI是微软设计的一种编程语言,旨在将C++的强大功能与.NET平台的互操作性相结合。它允许开发者使用C++...

    C#通过C++/CLI间接调用NativeCPP类的DLL文件

    C++/CLI是Microsoft为.NET框架设计的一种编程语言,它允许开发者编写混合模式的代码,即同时包含托管代码(.NET)和非托管代码(C++)。C++/CLI提供了一种机制,使得C++类可以被.NET环境理解和使用,同时也能够调用...

    C++CLI实例.zip_C++/CLI_CLI封装_cli c++_naturallyu87_varietyk5o

    C++/CLI是微软.NET框架下的一种编程语言,它提供了C++与.NET Framework的交互能力。这个"C++CLI实例.zip"文件包含了一系列关于C++/CLI的实践案例,旨在帮助初学者理解如何使用C++/CLI进行.NET开发,以及如何进行CLI...

    Expert C++/CLI

    本书《Expert C++/CLI: .NET for Visual C++ Programmers》由Marcus Heege编写,是一本专为想要深入理解如何在.NET环境中利用Visual C++进行编程的读者而设计的书籍。以下是对本书涉及的主要知识点的详细解析。 ###...

    DirectX in C++/CLI

    DirectX在C++/CLI中的应用是一个将原生C++使用的DirectX图形库与.NET Framework的用户界面(UI)相结合的技术。DirectX是由微软开发的一组API,主要用于处理游戏、多媒体和其他高性能图形任务。它包括多个子组件,如...

    Expert C++/CLI Source Code

    总之,"Expert C++/CLI Source Code"提供了一个深入了解C++/CLI语言特性和实践技巧的窗口,通过对这些源码的研读和实践,开发者可以提升自己在.NET平台上使用C++的能力,更好地应对复杂的跨平台开发挑战。

    C++/CLI in Action source code

    《C++/CLI in Action 源代码》是关于C++/CLI编程实践的一份宝贵资源,其中包含了书中示例程序的源代码。C++/CLI是Microsoft为.NET框架开发的一种语言扩展,它使得C++程序员能够充分利用.NET的特性,如托管代码、垃圾...

    Pro Visual C++/CLI and the .NET 2.0 Platform 3/3

    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++/CLI是一种微软开发的语言扩展,它使得C++能够无缝地与.NET Framework交互,提供了一种混合编程的机制,可以同时利用C++的强大功能和.NET的便利性。本资料主要针对C++/CLI的学习,旨在帮助开发者理解和掌握这一...

    Visual C++ 2008 C++/CLI ASP.NET Web Templates

    在这一版本中,Microsoft 引入了对 C++/CLI(之前称为 Managed C++)的支持,这是一种扩展的 C++ 语言,专门用于.NET Framework 平台,允许开发者使用 C++ 语法创建托管代码,即运行在 .NET 上的代码。C++/CLI 提供...

    Expert C++ / CLI .NET for Visual C++ Programmers (带完整目录)

    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 ...

    [C++] Visual C++/CLI 从入门到精通 (英文版)

    [Microsoft Press] Visual C++/CLI 从入门到精通 (英文版) [Microsoft Press] Microsoft Visual C++/CLI Step by Step (E-Book) ☆ 出版信息:☆ [作者信息] Julian Templeman [出版机构] Microsoft Press ...

    C++/CLI in Action

    《C++/CLI in Action》是一本旨在帮助程序员更好地掌握C++/CLI编程技术的专业书籍。它不仅适合那些已经熟悉.NET框架并希望进一步了解如何在其中使用C++的开发者,也适用于那些对C++有一定基础并希望将其技能扩展到...

    Microsoft Visual C++/CLI Step by Step Aug 2013 PDF ePub

    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 ...

    Foundations of C++/CLI : The Visual C++ Language for .NET 3.5

    **C++/CLI**(C++ for Managed Code)是微软针对.NET框架设计的一种编程语言扩展,允许程序员利用熟悉的C++语法编写面向.NET公共语言运行库(Common Language Runtime, CLR)的应用程序。《C++/CLI的基础:Visual ...

    从托管C++到C++/CLI的参考资料

    C++/CLI是C++语言面向CLI平台的一个重要扩展,不仅解决了原有托管C++的一些弱点,还引入了许多新特性来充分利用.NET框架的优势。对于开发者而言,了解这些变化是非常重要的,可以帮助他们更有效地利用C++/CLI编写高...

    C++-CLI.in.Action

    《C++/CLI in Action》是一本详细介绍 C++ 和 CLI(公共语言基础结构,Common Language Infrastructure)的书籍。本书由 Nishant Sivakumar 编写,由 Manning Publications 出版。该书通过深入浅出的方式介绍了如何...

    实例解析C++/CLI的串行化

    总结来说,通过C++/CLI进行串行化和反串行化是一个强大的功能,它允许开发者在.NET环境中将C++对象持久化存储,并在需要时重新加载这些对象。掌握C++/CLI中的串行化技术,对于需要在.NET平台上进行复杂数据操作的C++...

    C++/CLI Primer: For .NET Development

    "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 ...

Global site tag (gtag.js) - Google Analytics