Procedura: migrare a /clr:safe (C++/CLI)
In Visual C++ è possibile generare componenti verificabili mediante l'opzione /clr:safe, che indica al compilatore di generare errori per ciascun costrutto di codice non verificabile.
Note
Di seguito sono elencati alcuni problemi che possono generare errori di verificabilità:
Tipi nativi. Anche se non viene utilizzata, la dichiarazione di classi native, strutture, puntatori o matrici impedirà la compilazione.
Variabili globali.
Chiamate di funzione in una qualsiasi libreria non gestita, incluse le chiamate di funzione di Common Language Runtime.
Una funzione verificabile non può contenere un static_cast Operator per il downcast. L'static_cast Operator può essere utilizzato per il cast tra tipi primitivi. Per il downcast, invece, deve essere utilizzato safe_cast o un cast di tipo C (implementato come safe_cast).
Una funzione verificabile non può contenere un reinterpret_cast Operator (o un cast equivalente di tipo C).
Una funzione verificabile non può eseguire operazioni aritmetiche su un interior_ptr. Può solo eseguire assegnazioni e annullarne i riferimenti.
Dato che una funzione verificabile può solo generare o intercettare puntatori a tipi di riferimento, è necessario eseguire il boxing dei tipi di valore prima della generazione.
Una funzione verificabile può chiamare soltanto funzioni verificabili (non sono consentite chiamate al Common Language Runtime, incluse AtEntry/AtExit, e non sono consentiti costruttori globali).
Una classe verificabile non può utilizzare Explicit.
Se si sta compilando un file exe, non è possibile dichiarare eventuali parametri in una funzione main. Di conseguenza, è necessario utilizzare il metodo GetCommandLineArgs per recuperare gli argomenti della riga di comando.
Chiamata non virtuale a una funzione virtuale. Di seguito è riportato un esempio.
// 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 }
Inoltre, le parole chiave elencate di seguito non possono essere utilizzate nel codice verificabile.