混合モードから純粋な中間言語へのプロジェクトの変換
既定では、Visual C++ CLR プロジェクトはすべて、C ランタイム ライブラリにリンクされます。 結果として、これらのプロジェクトは、ネイティブ コードを共通言語ランタイム (マネージ コード) を対象としたコードと結合するため、混合モード アプリケーションとして分類されます。 これらをコンパイルすると、Microsoft Intermediate Language (MSIL) と呼ばれる中間言語 (IL) が生成されます。
混合モードのアプリケーションを純粋な中間言語に変換するには
C ランタイム ライブラリ (CRT: C Run-Time) へのリンクを削除します。
アプリケーションのエントリ ポイントが定義されている .cpp ファイルで、エントリ ポイントを Main() に変更します。 Main() の使用は、プロジェクトを CRT にリンクしないことを示します。
ソリューション エクスプローラーで、プロジェクトを右クリックし、ショートカット メニューの [プロパティ] をクリックして、アプリケーションのプロパティ ページを開きます。
[リンカー] の [詳細] プロジェクト プロパティ ページで、[エントリ ポイント] フィールドをクリックし、「Main」と入力します。
コンソール アプリケーションの場合は、[リンカー] の [システム] プロパティ ページで、[サブシステム] フィールドをクリックし、その値を [コンソール (/SUBSYSTEM:CONSOLE)] に変更します。
注意
Windows フォーム アプリケーションの場合は、[サブシステム] フィールドが既定で [Windows (/SUBSYSTEM:WINDOWS)] に設定されているため、このプロパティを設定する必要はありません。
stdafx.h で、すべての #include ステートメントをコメント アウトします。 コンソール アプリケーションの例を次に示します。
// #include <iostream> // #include <tchar.h>
または
Windows フォーム アプリケーションの例を次に示します。
// #include <stdlib.h> // #include <malloc.h> // #include <memory.h> // #include <tchar.h>
Windows フォーム アプリケーションの場合は、Form1.cpp で、windows.h を参照する #include ステートメントをコメント アウトします。 たとえば、次のようになります。
// #include <windows.h>
次のコードを stdafx.h に追加します。
#ifndef __FLTUSED__ #define __FLTUSED__ extern "C" __declspec(selectany) int _fltused=1; #endif
すべてのアンマネージ型を削除します。
System 名前空間の構造体への参照に置き換えられるすべてのアンマネージ型を置き換えます。 次の表は、一般的なマネージ型を示しています。
Structure
説明
ブール値を表します。
8 ビット符号なし整数を表します。
Unicode 文字を表します。
通常、日付や時刻として表現される瞬間を表します。
10 進数を表します。
倍精度浮動小数点数を表します。
グローバル一意識別子 (GUID) を表します。
16 ビット符号付き整数を表します。
32 ビット符号付き整数を表します。
64 ビット符号付き整数を表します。
ポインターまたはハンドルを表すときに使用されるプラットフォーム固有の型。
8 ビット符号付き整数を表します。
単精度浮動小数点数を表します。
時間間隔を表します。
16 ビット符号なし整数を表します。
32 ビット符号なし整数を表します。
64 ビット符号なし整数を表します。
ポインターまたはハンドルを表すときに使用されるプラットフォーム固有の型。
値を返さないメソッドを示します。このメソッドの戻り値の型は void です。