Compartilhar via


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

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

Comentários

Os seguintes problemas de 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, incluindo chamadas de função do common language runtime

  • Uma função verificável não pode conter um Operador static_cast de conversão inferior.O Operador static_cast pode ser usado para conversão entre tipos primitivos, mas para conversão inferior, safe_cast (Extensões de Componentes C++) ou um efeito de estilo C (que é implementado como um safe_cast (Extensões de Componentes C++)) deve ser usado.

  • Uma função verificável não pode conter um reinterpret_cast operador (ou qualquer equivalente de estilo c converter).

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

  • Uma função verificável somente pode lançar ou capturar os ponteiros para tipos de referência para que tipos de valor devem ser in a box antes de lançar.

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

  • Não é possível usar uma classe verificável Explicit.

  • Se construindo um EXE, uma função principal não pode declarar quaisquer parâmetros, portanto, GetCommandLineArgs deve ser usado para recuperar os 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 usadas no código verificável:

Consulte também

Referência

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