C++ アプリケーションでの厳密な型チェックの使用

提供: Appmethod Topics
移動先: 案内検索

C++ の仕様:インデックス への移動


新しい C++ アプリケーションのデフォルトの型チェック方式は STRICT で、#define STRICT を設定したようになります(これは、32 ビット Windows アプリケーションだけでなく、64 ビット Windows にも適用されます)。Appmethod C++ 2007 より前のバージョンで作成されたアプリケーションでは、以前のデフォルトである #define NO_STRICT をまだ使用しています。 VCL では、Windows ハンドル パラメータを C++ の STRICT マングル方式に一致するように変換できるようになり、STRICT モードでコンパイルすると、型安全性が強化され、VCL のネイティブ マングル処理にも一致するという利点があります。

NO_STRICT が定義されたコードの移行

NO_STRICT を定義しているアプリケーションをアップグレードして、STRICT モードでコンパイルされるようにすることをお勧めします(まず最初に、このトピックで説明しているように、NO_STRICT 条件定義を削除します)。 ただし、VCL には NO_STRICT を定義しているアプリケーション用のエントリ ポイントがまだ用意されており、コードを STRICT モードでコンパイルしない場合は、引き続き NO_STRICT を使用できます。 とは言え、これは今後変わる可能性があることを知っておいてください。

アプリケーションで NO_STRICT が使用されているかどうかを知る方法

NO_STRICT が定義されているコード プロジェクトを手っ取り早く見つけるには、*.cbproj ファイルで NO_STRICT を検索します。

メモ: Appmethod C++ プロジェクト ファイル(.cbproj ファイル)は、コード エディタで表示および編集は不可能、また、別のエディタにおいても編集してはいけませんが、別のエディタや GREP を使用した .cbproj ファイルの検索は行うことができます。

特定のプロジェクトについては、以下の手順のとおり、IDE を使用して NO_STRICT マクロを削除できます。

NO_STRICT 条件定義の削除

  1. NO_STRICT が定義されているプロジェクトを開きます。
  2. [プロジェクト|オプション...|[C++ (共有オプション)]を選択します(これは、[<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスの一番上のページです)。
  3. ページの最上部にある[ビルド構成]フィールドで、STRICT 条件定義を使用する構成([Base]構成など)を選択します。

    メモ: [条件定義]フィールドに[継承]および["<構成名>" からの値]のサブフィールドが含まれている場合は、[ビルド構成]フィールドで名前付きの親構成(<構成名> に示されるもの)を選択する必要があります。

  4. [条件定義]フィールドで、「NO_STRICT」を強調表示し削除します。
  5. [条件定義]ダイアログ ボックスで[OK]をクリックします。
  6. [プロジェクト オプション]ダイアログ ボックスで[OK]をクリックします。
  7. プロジェクトを再ビルドし、(特に、Windows 手続きの呼び出しで)型チェックの結果エラーが表示される場合は、それらを修正します。

STRICT 条件定義の追加(省略可能)

STRICT がデフォルトであるため、NO_STRICT 条件定義の削除は STRICT 条件定義の設定と同等です。 ただし、以下の手順に従って STRICT 条件定義を明示的に追加することもできます。

  1. [プロジェクト|オプション...|[C++ (共有オプション)]を選択します(これは、[<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスの一番上のページです)。
  2. ページの最上部にある[ビルド構成]フィールドで、STRICT 条件定義を使用する構成([Base]構成など)を選択します。

    メモ: [条件定義]フィールドに[継承]および["<構成名>" からの値]のサブフィールドが含まれている場合は、[ビルド構成]フィールドで名前付きの親構成(<構成名> に示されるもの)を選択する必要があります。

  3. [条件定義]フィールドで、参照ボタン([...])をクリックします。
  4. [条件定義]ダイアログ ボックスで、テキスト入力フィールドに、STRICT と入力して[追加]をクリックします。
  5. [条件定義]ダイアログ ボックスで[OK]をクリックします。
  6. [プロジェクト オプション]ダイアログ ボックスで[OK]をクリックします。
  7. プロジェクトを再ビルドし、(特に、Windows 手続きの呼び出しで)型チェックの結果エラーが表示される場合は、それらを修正します。

Windows の以前の型を使用した場合の型チェック上の問題点

Windows 3.1 以前は、HWND や HMENUS などの Windows 型は void * 型でした。 つまり、HWND や HMENUS をパラメータとして Windows 手続きを呼び出すこともでき、Windows はそれらを区別できません。 Windows 3.1 の導入で、これらの型の多くは、別個の型に変更されました。 現在では、Windows は、間違った型での呼び出しかどうかを判定できます。

この変更で、既存アプリケーションの開発者には膨大な作業が残されました。これらの Windows 手続き呼び出しで使用されているパラメータの型を変更する作業です。 NO_STRICT 条件定義を使用することで、この変換作業の負荷が軽減されます。 NO_STRICT の設定により、VCL では、以前のパラメータ型を引数として受け取って変換を行う Windows 手続きのオーバーロードへのエントリ ポイントが提供されます。

関連項目