Partilhar via


Como migrar para /clr:safe (C++/CLI)

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

Comentários

Os seguintes problemas gerenciem erros de verificabilidade:

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

  • Variáveis globais

  • Chamadas de função em qualquer biblioteca não gerenciado, incluindo chamadas de função de Common Language Runtime

  • Uma função verificável não pode conter Operador static_cast para a conversão para baixo. Operador static_cast pode ser usado para converter entre tipos primitivos, mas para a conversão para baixo, o safe_cast (Extensões de Componentes C++) ou a c a conversão de estilo (que é implementada como safe_cast (Extensões de Componentes C++)) deve ser usada.

  • Uma função verificável não pode conter Operador reinterpret_cast (ou qualquer equivalente convertido de estilo 2.0 - c).

  • Uma função verificável não pode executar a aritmética em interior_ptr (C++/CLI). Só pode atribuir e desreferenciar-la.

  • Uma função verificável só pode gerar ou captura ponteiros para referenciar tipos, assim os tipos de valores devem ser boxed antes de gerar.

  • Uma função verificável só pode chamar funções verificáveis (tais que as chamadas para Common Language Runtime não sejam permitidos, incluem AtEntry/AtExit, e assim que os construtores globais são desaprovados.)

  • Uma classe verificável não pode usar Explicit.

  • Se estiver compilando EXE, uma função principal não pode declarar nenhum parâmetro, de modo que GetCommandLineArgs deve ser usado para recuperar argumentos de linha de comando.

  • Fazendo uma chamada não virtual para uma função virtual. Por exemplo:

    // 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 usados no código verificável:

Consulte também

Referência

Código puro e verificável (C++/CLI)