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:
não gerenciado e pack pragmas
nua e Alinhar__declspec modificadores
__try e**__except**