Gewusst wie: Migrieren auf /clr:safe
Aktualisiert: November 2007
Visual C++ 2005 kann unter Verwendung von /clr:safe überprüfbare Komponenten generieren. Dadurch gibt der Compiler für jedes nicht überprüfbare Codekonstrukt einen Fehler aus.
Hinweise
In den folgenden Fällen werden Überprüfbarkeitsfehler ausgegeben:
Systemeigene Typen. Auch wenn sie nicht verwendet wird, verhindert eine Deklaration systemeigener Klassen, Strukturen, Zeiger oder Arrays die Kompilierung.
Globale Variablen
Funktionsaufrufe in eine nicht verwaltete Bibliothek, einschließlich der Common Language Runtime-Funktionsaufrufe
Eine überprüfbare Funktion darf keinen static_cast Operator für die Abwärtskonvertierung enthalten. Der static_cast Operator kann zur Typkonvertierung zwischen primitiven Typen verwendet werden, für die Abwärtskonvertierung muss jedoch safe_cast oder eine Umwandlung im C-Format (als safe_cast implementiert) verwendet werden.
Eine überprüfbare Funktion darf keinen reinterpret_cast Operator (oder eine entsprechende Umwandlung im C-Format) enthalten.
Eine überprüfbare Funktion kann keine Arithmetik mit einem interior_ptr ausführen. Es sind nur Zeigerzuweisungen und -dereferenzierungen zulässig.
Eine überprüfbare Funktion darf lediglich Zeiger auf Referenztypen auslösen oder abfangen, daher müssen Werttypen vor dem Auslösen geschachtelt werden.
Eine überprüfbare Funktion darf lediglich überprüfbare Funktionen aufrufen (CRT-Aufrufe sind daher nicht zulässig, denn sie enthalten AtEntry/AtExit, sodass globale Konstruktoren unzulässig sind).
Eine überprüfbare Klasse kann nicht Explicit verwenden.
Beim Erstellen einer EXE-Datei dürfen in einer Hauptfunktion keine Parameter deklariert werden, sodass GetCommandLineArgs zum Abrufen der Befehlszeilenargumente verwendet werden muss.
Ausführen eines nicht virtuellen Aufrufs einer virtuellen Funktion. Beispiel:
// 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 }
Auch die folgenden Schlüsselwörter sind aus überprüfbarem Code auszuschließen: