混合モードから純粋な中間言語へのプロジェクトの変換

既定では、Visual C++ CLR プロジェクトはすべて、C ランタイム ライブラリにリンクされます。 結果として、これらのプロジェクトは、ネイティブ コードを共通言語ランタイム (マネージ コード) を対象としたコードと結合するため、混合モード アプリケーションとして分類されます。 これらをコンパイルすると、Microsoft Intermediate Language (MSIL) と呼ばれる中間言語 (IL) が生成されます。

混合モードのアプリケーションを純粋な中間言語に変換するには

  1. C ランタイム ライブラリ (CRT: C Run-Time) へのリンクを削除します。

    1. アプリケーションのエントリ ポイントが定義されている .cpp ファイルで、エントリ ポイントを Main() に変更します。 Main() の使用は、プロジェクトを CRT にリンクしないことを示します。

    2. ソリューション エクスプローラーで、プロジェクトを右クリックし、ショートカット メニューの [プロパティ] をクリックして、アプリケーションのプロパティ ページを開きます。

    3. [リンカー][詳細] プロジェクト プロパティ ページで、[エントリ ポイント] フィールドをクリックし、「Main」と入力します。

    4. コンソール アプリケーションの場合は、[リンカー] の [システム] プロパティ ページで、[サブシステム] フィールドをクリックし、その値を [コンソール (/SUBSYSTEM:CONSOLE)] に変更します。

      注意

      Windows フォーム アプリケーションの場合は、[サブシステム] フィールドが既定で [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 名前空間の構造体への参照に置き換えられるすべてのアンマネージ型を置き換えます。 次の表は、一般的なマネージ型を示しています。

      Structure

      説明

      Boolean

      ブール値を表します。

      Byte

      8 ビット符号なし整数を表します。

      Char

      Unicode 文字を表します。

      DateTime

      通常、日付や時刻として表現される瞬間を表します。

      10 進数

      10 進数を表します。

      Double

      倍精度浮動小数点数を表します。

      Guid

      グローバル一意識別子 (GUID) を表します。

      Int16

      16 ビット符号付き整数を表します。

      Int32

      32 ビット符号付き整数を表します。

      Int64

      64 ビット符号付き整数を表します。

      IntPtr

      ポインターまたはハンドルを表すときに使用されるプラットフォーム固有の型。

      SByte

      8 ビット符号付き整数を表します。

      Single

      単精度浮動小数点数を表します。

      TimeSpan

      時間間隔を表します。

      UInt16

      16 ビット符号なし整数を表します。

      UInt32

      32 ビット符号なし整数を表します。

      UInt64

      64 ビット符号なし整数を表します。

      UIntPtr

      ポインターまたはハンドルを表すときに使用されるプラットフォーム固有の型。

      Void

      値を返さないメソッドを示します。このメソッドの戻り値の型は void です。