Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Cómo: Migrar a /clr:safe (C++/CLI)

Visual C++ puede generar componentes comprobables mediante /clr:safe, que hace que el compilador genere errores para cada construcción de código no comprobable.

Los problemas siguientes generan errores de verificabilidad:

  • Tipos nativos. Aun cuando no se utilice, la declaración de clases nativas, estructuras, punteros o matrices impide la compilación.

  • Variables globales

  • Llamadas a funciones en cualquier biblioteca no administrada, incluso las llamadas a funciones de Common Language Runtime

  • Una función comprobable no puede contener un operador static_cast para conversión a versiones anteriores. El operador static_cast se puede utilizar para convertir entre tipos primitivos, pero para conversión a versiones anteriores, se debe utilizar safe_cast (Extensiones de componentes de C++) o una conversión de estilo C (que se implemente como safe_cast (Extensiones de componentes de C++)).

  • Una función comprobable no puede contener un operador de reinterpret_cast (ni ningún equivalente de conversión de estilo C).

  • Una función comprobable no puede realizar operaciones aritméticas en interior_ptr (C++/CLI). Sólo puede asignársela y desreferenciarla.

  • Una función comprobable sólo puede producir o detectar punteros a tipos de referencia, por lo que se debe aplicar una conversión boxing de los tipos de valor antes de la producción.

  • Una función comprobable solo puede llamar a funciones comprobables (las que llaman a Common Language Runtime no están permitidas, incluidas AtEntry/AtExit; por tanto, los constructores globales no están permitidos).

  • Una clase comprobable no puede utilizar Explicit.

  • Si se está compilando un EXE, una función principal no puede declarar ningún parámetro, por lo que se debe utilizar GetCommandLineArgs para recuperar los argumentos de la línea de comandos.

  • Realizar una llamada no virtual a una función virtual. Por ejemplo:

    // 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
    }
    

Además, no se pueden utilizar las siguientes palabras clave en el código comprobable:

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft