다음을 통해 공유


방법: /clr:safe로 마이그레이션(C++/CLI)

Visual C++에서는 /clr:safe를 사용하여 안정형 구성 요소를 생성할 수 있습니다. 이 옵션을 사용하면 각각의 비안정형 코드 구조체에 대해 컴파일러에서 오류가 생성됩니다.

설명

안정성 오류의 발생 원인으로는 다음과 같은 것이 있습니다.

  • 네이티브 형식. 실제로 사용되지 않더라도 네이티브 클래스, 구조체, 포인터 또는 배열을 선언하면 컴파일이 수행되지 않습니다.

  • 전역 변수

  • 공용 언어 런타임 함수 호출을 비롯하여 관리되지 않는 라이브러리에 대한 함수 호출

  • 안정형 함수는 다운캐스팅을 위한 static_cast Operator를 포함할 수 없습니다. 기본 형식 사이의 캐스팅에는 static_cast Operator를 사용할 수 있지만 다운캐스팅에는 safe_cast를 사용하거나 safe_cast로 구현되는 C 스타일 캐스트를 사용해야 합니다.

  • 안정형 함수에는 reinterpret_cast Operator 또는 이에 해당하는 C 스타일 캐스트를 포함할 수 없습니다.

  • 안정형 함수는 interior_ptr에 대한 산술 연산을 수행할 수 없습니다. 이 포인터는 자체에만 할당되고 역참조됩니다.

  • 안정형 함수는 참조 형식에 대한 포인터만 throw하거나 catch합니다. 따라서 throw하기 전에 값 형식이 boxed 형식이 되어야 합니다.

  • 안정형 함수는 안정형 함수만 호출할 수 있습니다. 안정형 함수는 공용 언어 런타임을 호출할 수 없고 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
    }
    

또한 확인할 수 있는 코드에는 다음 키워드를 사용할 수 없습니다.

참고 항목

참조

순수형 및 안정형 코드(C++/CLI)