Sdílet prostřednictvím


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:

Viz také

Referenční dokumentace

Čistý a ověřitelné kódu (C + +/ CLI)