컴파일러 경고(수준 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