C++ アプリケーションでの厳密な型チェックの使用
C++ の仕様:インデックス への移動
新しい C++ アプリケーションのデフォルトの型チェック方式は STRICT で、あたかも #define STRICT
を設定したかのようになっています(これは、32 ビット Windows アプリケーションに加え、64 ビット Windows アプリケーションにも適用されます)。C++Builder 2007 より前のバージョンで作成されたアプリケーションでは、以前のデフォルトである #define NO_STRICT
をまだ使用しています。VCL では、Windows ハンドル パラメータを C++ の STRICT マングル方式に一致するように変換できるようになり、STRICT モードでコンパイルすると、型安全性が強化され、VCL のネイティブ マングル処理にも一致するという利点があります。
目次
NO_STRICT が定義されたコードの移行
NO_STRICT を定義しているアプリケーションをアップグレードして、STRICT モードでコンパイルされるようにすることをお勧めします(まず最初に、このトピックで説明しているように、NO_STRICT 条件定義を削除します)。ただし、VCL には NO_STRICT を定義しているアプリケーション用のエントリ ポイントがまだ用意されており、コードを STRICT モードでコンパイルしない場合は、引き続き NO_STRICT を使用できます。とは言え、これは今後変わる可能性があることを知っておいてください。
- 厳密な(STRICT)型チェックの詳細については、Microsoft Windows Platform SDK ヘルプの[Using the Windows Headers|STRICT Type Checking](http://msdn.microsoft.com/en-us/library/aa383732(v=vs.85).aspx)を参照してください。
- システムへの Microsoft SDK ヘルプのインストールについては、EDN で公開されている製品の Install.html ファイル(http://edn.embarcadero.com/article/40774)の「オンライン ヘルプのインストール」を参照してください。
アプリケーションで NO_STRICT が使用されているかどうかを知る方法
NO_STRICT が定義されているコード プロジェクトを手っ取り早く見つけるには、*.cbproj
ファイルで NO_STRICT を検索します。
- メモ: C++Builder プロジェクト ファイル(
.cbproj
ファイル)は、コード エディタでは表示も編集もできず、別のエディタで変更してもいけませんが、別のエディタや検索ユーティリティを使って.cbproj
ファイル内を検索することはできます。たとえば、GREP を使用することができます。
特定のプロジェクトについては、以下の手順のとおり、IDE を使用して NO_STRICT マクロを削除できます。
NO_STRICT 条件定義の削除
- NO_STRICT が定義されているプロジェクトを開きます。
- [プロジェクト|オプション...|C++ (共有オプション)]([<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスの一番上のページ)を選択します。
- ページの最上部にある[ビルド構成]フィールドで、STRICT 条件定義を使用する構成([Base]構成など)を選択します。
メモ: [条件定義]フィールドに[継承]および["<構成名>" からの値]のサブフィールドが含まれている場合は、[ビルド構成]フィールドで名前付きの親構成(<構成名> に示されるもの)を選択する必要があります。
- [条件定義]フィールドで、「NO_STRICT」を強調表示し削除します。
- [条件定義]ダイアログ ボックスで[OK]をクリックします。
- [<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスで[OK]をクリックします。
- プロジェクトを再ビルドし、(特に、Windows 手続きの呼び出しで)型チェックの結果エラーが表示される場合は、それらを修正します。
STRICT 条件定義の追加(省略可能)
STRICT がデフォルトであるため、NO_STRICT 条件定義の削除は STRICT 条件定義の設定と同等です。ただし、以下の手順に従って STRICT 条件定義を明示的に追加することもできます。
- [プロジェクト|オプション...|C++ (共有オプション)]([<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスの一番上のページ)を選択します。
- ページの最上部にある[ビルド構成]フィールドで、STRICT 条件定義を使用する構成([Base]構成など)を選択します。
メモ: [条件定義]フィールドに[継承]および["<構成名>" からの値]のサブフィールドが含まれている場合は、[ビルド構成]フィールドで名前付きの親構成(<構成名> に示されるもの)を選択する必要があります。
- [条件定義]フィールドで、参照ボタン()をクリックします。
- [条件定義]ダイアログ ボックスで、テキスト入力フィールドに「STRICT」と入力し、[追加]をクリックします。
- [条件定義]ダイアログ ボックスで[OK]をクリックします。
- [<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスで[OK]をクリックします。
- プロジェクトを再ビルドし、(特に、Windows 手続きの呼び出しで)型チェックの結果エラーが表示される場合は、それらを修正します。
Windows の以前の型を使用した場合の型チェック上の問題点
Windows 3.1 以前は、HWND や HMENUS などの Windows 型は void *
型でした。つまり、HWND や HMENUS をパラメータとして Windows 手続きを呼び出すこともでき、Windows はそれらを区別できません。Windows 3.1 の導入で、これらの型の多くは、別個の型に変更されました。現在では、Windows は、間違った型での呼び出しかどうかを判定できます。
この変更で、既存アプリケーションの開発者には膨大な作業が残されました。これらの Windows 手続き呼び出しで使用されているパラメータの型を変更する作業です。NO_STRICT 条件定義を使用することで、この変換作業の負荷が軽減されます。NO_STRICT の設定により、VCL では、以前のパラメータ型を引数として受け取って変換を行う Windows 手続きのオーバーロードへのエントリ ポイントが提供されます。