Porady: migracja do /clr:safe (C++/CLI)
Języka Visual C++ można wygenerować sprawdzalne składniki za pomocą /clr:safe, co powoduje, że kompilator do generowania błędów dla każdego konstrukcja-sprawdzalne kodu.
Uwagi
Następujące problemy generować błędy możliwość weryfikacji:
Macierzyste typy.Nawet jeśli nie jest używany, deklarację macierzystych klas, struktury, wskaźniki i tablice uniemożliwi kompilacji.
Zmienne globalne
Wywołania funkcji do niezarządzanego library, w tym Typowe wywołania funkcji środowiska wykonawczego języka
Nie mogą zawierać funkcji sprawdzalne Operator static_cast do odlewania w dół.Operator static_cast Może być używany do odlewania między typów pierwotnych, ale do odlewania down, safe_cast lub cast stylu C (która jest zaimplementowany jako safe_cast) musi być używany.
Nie mogą zawierać funkcji sprawdzalne Operator reinterpret_cast (lub jakikolwiek odpowiednik stylu C oddanych).
Sprawdzalne funkcji nie można wykonać operacji arytmetycznych na interior_ptr.Tylko może przypisać do niego i odwołania do niego.
Funkcja sprawdzenia można tylko rzut lub złapać wskaźniki do typów odwołań, więc typów wartości musi być zapakowane przed wyrzuceniem.
Sprawdzalne funkcja może wywołać tylko zweryfikować funkcje (takie, że nie wolno wywołania do aparatu plików wykonywalnych języka wspólnego, obejmują AtEntry/AtExit, i tak globalnego konstruktory są niedozwolone).
Sprawdzalne klas nie można używać Explicit.
Jeśli konstruowany EXE, główną funkcją nie można zadeklarować wszystkie parametry, tak GetCommandLineArgs musi być używana do pobierania argumentów wiersza polecenia.
Dokonywanie-wirtualne wywołanie funkcji wirtualnych.Na przykład:
// 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 }
Następujące słowa kluczowe nie może być używane również podczas sprawdzalne kodu:
niezarządzane i pack pragmy
nagi i wyrównać__declspec modyfikatorów
__try i**__except**