将项目从混合模式转换为纯中间语言项目

默认情况下,所有 Visual C++ CLR 项目链接到 C 运行库。 由于这些项目联合使用了本机代码和面向公共语言运行时的代码(托管代码),所以它们被划分为混合模式的应用程序。 编译时,它们被编译为中间语言(IL),也称为 Microsoft 中间语言 (MSIL)。

将混合模式应用程序转换为纯中间语言

  1. 移除指向 C 运行库 (CRT) 的链接:

    1. 在定义应用程序入口点的 .cpp 文件中,将入口点更改为 Main()。 使用 Main() 指示项目不链接到 CRT。

    2. 在解决方案资源管理器中右击项目,选择快捷菜单上的**“属性”**以打开应用程序的属性页。

    3. 在“链接器”的**“高级”**项目属性页中选择“入口点”,然后在此字段中输入 Main

    4. 对于控制台应用程序,在“链接器”的“系统”项目属性页中,选择“子系统”字段,然后将该字段更改为“控制台 (/SUBSYSTEM:CONSOLE)”。

      备注

      不必为 Windows 窗体应用程序设置此属性,因为默认情况下,“SubSystem”字段设置为“Windows (/SUBSYSTEM:WINDOWS)”。

    5. 在 stdafx.h 中,注释掉所有 #include 语句。 例如,在控制台应用程序中:

      // #include <iostream>
      // #include <tchar.h>
      

      - 或 -

      例如,在 Windows 窗体应用程序中:

      // #include <stdlib.h>
      // #include <malloc.h>
      // #include <memory.h>
      // #include <tchar.h>
      
    6. 对于 Windows 窗体应用程序,在 Form1.cpp 中,注释掉引用 windows.h 的 #include 语句。 例如:

      // #include <windows.h>
      
  2. 在 stdafx.h 中,添加下列代码:

    #ifndef __FLTUSED__
    #define __FLTUSED__
       extern "C" __declspec(selectany) int _fltused=1;
    #endif
    
  3. 移除所有非托管类型:

    1. 在适当的情况下,将非托管类型替换为对 System 命名空间中结构的引用。 下表列出了常用的托管类型:

      结构

      描述

      Boolean

      表示布尔值。

      Byte

      表示一个 8 位无符号整数。

      Char

      表示一个 Unicode 字符。

      DateTime

      表示时间上的一刻,通常以日期和当天的时间表示。

      Decimal

      表示十进制数。

      Double

      表示一个双精度浮点数。

      Guid

      表示全局唯一标识符 (GUID)。

      Int16

      表示 16 位有符号整数。

      Int32

      表示 32 位有符号整数。

      Int64

      表示 64 位有符号整数。

      IntPtr

      用于表示指针或句柄的平台特定类型。

      SByte

      表示 8 位有符号整数。

      Single

      表示一个单精度浮点数字。

      TimeSpan

      表示一个时间间隔。

      UInt16

      表示 16 位无符号整数。

      UInt32

      表示 32 位无符号整数。

      UInt64

      表示 64 位无符号整数。

      UIntPtr

      用于表示指针或句柄的平台特定类型。

      Void

      指示不返回值的方法;即,该方法的返回类型为 void。