Поделиться через


Практическое руководство. Миграция в /clr:safe

Обновлен: Ноябрь 2007

Visual C++ 2005 может создавать компоненты с помощью /clr:safe, что приводит к возникновению ошибок в компиляторе для каждой не поддающейся проверке конструкции кода.

Заметки

Такие ошибки могут возникать в следующих случаях.

  • Собственные типы. Даже если эти типы не используются, объявление собственных классов, структур, указателей или массивов может помешать компиляции.

  • Глобальные переменные

  • Вызовы функции в неуправляемой библиотеке, включая вызовы функции в среде CLR.

  • Проверяемая функция не может содержать static_cast Operator для понижающего преобразования. static_cast Operator может использоваться для преобразования среди простых типов, однако, для понижающего преобразования должны использоваться safe_cast и преобразование стиля C (реализованного как safe_cast).

  • Проверяемая функция не может содержать reinterpret_cast Operator (или любой другой эквивалент преобразования стиля C).

  • Проверяемая функция не может выполнять арифметические действия interior_ptr. Действия могут присваиваться ей и использоваться для разыменования.

  • Проверяемая функция может только вызывать и принимать указатели для ссылочных типов, поэтому типы значений должны упаковываться перед вызовом.

  • Проверяемая функция может вызывать только проверяемые функции (вызовы среды CLR не допускаются, включая AtEntry/AtExit, глобальные конструкторы также не допускаются).

  • Класс переменной не может использовать Explicit.

  • При сборке EXE главная функция не может объявлять параметры, поэтому для извлечения аргументов командной строки необходимо использовать GetCommandLineArgs.

  • Невиртуальный вызов к виртуальной функции. Пример.

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

В проверяемом коде не допускается использование следующих ключевых слов:

См. также

Ссылки

Чистый и проверяемый код