方法 : /clr:safe に移行する

更新 : 2007 年 11 月

Visual C++ 2005 では、/clr:safe を使用して検証可能なコンポーネントを生成できます。これによりコンパイラは、検証不可能なコード コンストラクタを検出するたびにエラーを生成します。

解説

次の問題により、検証可能性エラーが生成されます。

  • ネイティブ型。ネイティブ型を使用していない場合でも、ネイティブ クラス、構造体、ポインタ、または配列の宣言によりコンパイルできなくなります。

  • グローバル変数

  • 共通言語ランタイム関数呼び出しなどの任意のアンマネージ ライブラリへの関数呼び出し

  • 検証可能な関数には、ダウンキャストのために static_cast Operator を含めることはできません。プリミティブ型どうしのキャストには、static_cast Operator を使用できますが、ダウンキャストには、safe_cast または C スタイルのキャスト (これは、safe_cast として実装される) を使用する必要があります。

  • 検証可能な関数には、reinterpret_cast Operator (または同等の C スタイル キャスト) を含めることができません。

  • 検証可能な関数は、interior_ptr 上で数値型を実行できません。可能なのは、代入と逆参照だけです。

  • 検証可能な関数は、参照型へのポインタだけをスローまたはキャッチします。このため、値型はスローする前にボックス化する必要があります。

  • 検証可能な関数は、検証可能な関数だけを呼び出すことができます。AtEntry/AtExit を含む共通言語ランタイムの呼び出しが許可されないため、グローバル コンストラクタも使用できません。

  • 検証可能なクラスは、Explicit を使用できません。

  • EXE をビルドする場合、main 関数はパラメータを宣言できないため、GetCommandLineArgs を使用してコマンド ライン引数を取得する必要があります。

  • 仮想関数への非仮想呼び出しを行います。たとえば、次のようにします。

    // not_verifiable.cpp
    // compile with: /clr
    ref struct A {
       virtual void Test() {}
    };
    
    ref struct B : A {};
    
    int main() {
       B^ b1 = gcnew B;
       b1->A::Test();   // Non-virtual call to virtual function
    }
    

また、次のキーワードは検証可能なコードで使用できません。

参照

参照

純粋なコードと検証可能なコード