다음을 통해 공유


컴파일러 경고(수준 3) C4398

'variable': 프로세스별 전역 개체가 여러 appdomain에서 제대로 작동하지 않을 수 있습니다. __declspec(appdomain)를 사용하는 것이 좋습니다.

설명

네이티브 형식의 __clrcall 호출 규칙이 있는 가상 함수는 애플리케이션 도메인별 vtable을 만듭니다. 이러한 변수는 여러 애플리케이션 도메인에서 사용되는 경우 올바르게 작동하지 않을 수 있습니다.

변수 __declspec(appdomain)를 명시적으로 표시하여 이 경고를 해결할 수 있습니다. Visual Studio 2017 이전 버전의 Visual Studio에서는 기본적으로 appdomain당 전역 변수를 만드는 /clr:pure컴파일하여 이 경고를 해결할 수 있습니다. /clr:pure 컴파일러 옵션은 Visual Studio 2015에서 더 이상 사용되지 않으며 Visual Studio 2017에서는 지원되지 않습니다.

자세한 내용은 appdomain애플리케이션 도메인 및 Visual C++를 참조하세요.

예시

다음 샘플에서는 C4398을 생성합니다.

// C4398.cpp
// compile with: /clr /W3 /c
struct S {
   virtual void f( System::String ^ );   // String^ parameter makes function __clrcall
};

S glob_s;   // C4398
__declspec(appdomain) S glob_s2;   // OK