Electronic Joint Business

Solution for E-Business

托管C++ (一) C++/CLI的诞生

Managed C++ 和通常的VC++不同,托管(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++ 编写的程序同时拥有托管代码和非托管代码。 我们先来看一下这个例子。在这个例子中,我们混合使用了托管代码和非托管代码。在托管代码中,我们不能使用类似嵌入汇编等等许多特性,这就是为什么同时使用托管和非托管代码有时很重要。 #include "stdafx.h" #include <stdio.h> // to printf() using namespace System; #pragma unmanaged void print(char *msg) {   printf("%s\n", msg); } #pragma managed int main(array<System::String ^> ^args) {   […]

, ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.