演练:使用 /clr:pure 功能

更新:2007 年 11 月

本演练演示在纯 MSIL 应用程序中如何使用反射。 示例中对 Windows 窗体 Scribble 解决方案进行了扩展,包括了某些本机类。这些本机类不仅包含静态数据,还公开了必须从 Windows 窗体设计器中使用的 Windows 窗体控件。用 /clr:pure 选项生成示例可以解决这种情况的潜在问题。有关更多信息,请参见如何:迁移到 /clr:pure

先决条件

ScribbleDotNET 示例:使用 CLR 功能扩展随意画图功能

生成/运行此示例应用程序

  1. 下载 ScribbleDotNET 示例。

  2. 在 Visual Studio 开发环境中打开解决方案文件 Scribble.sln。

  3. 使用“CLR-Pure Debug”或“CLR-Pure Release”配置生成解决方案。

  4. 在设计模式中打开 StringDialog.h 组件

  5. 出现的设计窗口将包含“ScribbleCustomControl”的实例。

技术

  • .NET 的新 C++ 语法

  • 反射

  • 用于从托管类访问本机类型的 marshal_as<T>。

此示例创建一个非托管类并将其包装在一个托管控件类中。当编译成纯 MSIL 应用程序时,Visual Studio Windows 窗体设计器能够反射得到的 EXE 文件,并加载托管控件以便在 Windows 窗体设计器中使用。此行为仅在当前配置是创建纯 MSIL 应用程序时才可能实现,在非托管模式或混合模式下是不可能实现的。

在该控件中,我们将实例化本机类的一个实例。我们需要的信息是本机字符串。我们使用 marshal_as<T> 将数据转换为可以在支持 CLR 的应用程序中使用的托管数据类型。有关封送处理库的更多信息,请参见 Overview of Marshaling in C++

请参见

概念

New C++ Language Features

其他资源

Visual C++ 2008 中的演练