Jak: přenést do /clr:safe (C + +/ CLI)
Visual C++ může generovat ověřitelné komponenty pomocí /clr:safe, což způsobí, že bude kompilátor generovat chyby pro každou konstrukci neověřitelného kódu.
Poznámky
Následující problémy způsobí chyby ověřitelnosti:
Nativní typy.I když nejsou použity, deklarace nativních tříd, struktur, ukazatelů nebo polí zabrání kompilaci.
Globální proměnné
Volání funkcí do jakékoli nespravované knihovny včetně volání funkcí modulu CLR (Common Language Runtime)
Ověřitelná funkce nemůže obsahovat static_cast operátora pro přetypování dolů.static_cast operátora může být použit pro přetypování mezi primitivními typy, ale pro přetypování dolů musí být použit safe_cast (rozšíření komponent C++) nebo přetypování ve stylu C (, které je implementováno jako safe_cast (rozšíření komponent C++)).
Ověřitelná funkce nemůže obsahovat reinterpret_cast operátora (nebo jakýkoli ekvivalent přetypování ve stylu C).
Ověřitelná funkce nemůže provádět aritmetiku na interior_ptr (C++/CLI).Mohou se k ní pouze přiřadit a přistoupit přes ukazatel.
Ověřitelná funkce může pouze vyvolávat nebo zachycovat ukazatele na odkazové typy, takže hodnotové typy musí být před vyvoláním zabaleny.
Ověřitelná funkce může volat pouze ověřitelné funkce (například volání do common language runtime nejsou povolena, včetně AtEntry/AtExit, a tak jsou zakázány globální konstruktory).
Ověřitelná třída nemůže použít Explicit.
Sestavujete-li EXE, nemůže hlavní funkce deklarovat jakékoli parametry, takže musí být použito GetCommandLineArgs k načtení argumentů příkazového řádku.
Vytvoření nevirtuálního volání virtuální funkce.Příklad:
// 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 }
Také v ověřitelném kódu nelze použít následující klíčová slova: