Como: Migrar para o /CLR: safe

Visual C++ pode gerar verificáveis componentes usando /clr:safe, que faz com que o compilador gere erros para cada construção de código não verificável.

Comentários

Os seguintes problemas geram erros de verifiability:

  • Tipos nativos. Mesmo se não for usado, a declaração de classes nativas, estruturas, ponteiros ou arrays impedirá a compilação.

  • Variáveis globais

  • Chamadas de função em qualquer biblioteca não gerenciada, inclusive chamadas de função do common language runtime

  • Uma função verificável não pode conter um static_cast Operator para baixo-elenco. O static_cast Operator pode ser usado para conversão entre tipos primitivos, mas para conversão inferior, safe_cast ou uma projeção de estilo C (que é implementado como um safe_cast) deve ser usado.

  • Uma função verificável não pode conter um reinterpret_cast Operator (ou qualquer equivalente de projeção de estilo C).

  • Uma função verificável não pode executar cálculos aritméticos em um interior_ptr. Ele só pode atribuir a ele e referência.

  • Uma função verificável só pode lançar ou catch ponteiros para os tipos de referência, portanto, os tipos de valor devem ser in a box antes de lançar.

  • Uma função verificável só pode chamar funções verificáveis (de modo que as chamadas para o common language runtime não são permitidas, incluem AtEntry/AtExit, e, portanto, construtores globais não são permitidos).

  • Uma classe verificável não é possível usar Explicit.

  • Se construindo um EXE, uma função main não pode declarar quaisquer parâmetros, portanto, GetCommandLineArgs deve ser usado para recuperar argumentos de linha de comando.

  • Fazendo uma chamada de não-virtual para uma função virtual. For example:

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

Além disso, as seguintes palavras-chave não podem ser usadas no código verificável:

Consulte também

Referência

Código puro e verificável