方法 : /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 }
また、次のキーワードは検証可能なコードで使用できません。