Postupy: Přenos na /clr:safe

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 Operator pro přetypování dolů. static_cast Operator 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 nebo přetypování ve stylu C (, které je implementováno jako safe_cast).

  • Ověřitelná funkce nemůže obsahovat reinterpret_cast Operator (nebo jakýkoli ekvivalent přetypování ve stylu C).

  • Ověřitelná funkce nemůže provádět aritmetiku na interior_ptr. 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é

Odkaz

Čistý a ověřitelný kód