Предупреждение компилятора (уровень 3) C4398
"переменная": глобальный объект для каждого процесса может работать неправильно с несколькими доменами приложений; рассмотрите возможность использования __declspec(appdomain)
Замечания
Виртуальная функция с соглашением о вызове __clrcall в собственном типе приводит к созданию виртуальной библиотеки домена приложения. Такая переменная может неправильно быть правильной при использовании в нескольких доменах приложений.
Это предупреждение можно устранить, явно помечая переменную __declspec(appdomain)
. В версиях Visual Studio до Visual Studio 2017 это предупреждение можно устранить, скомпилируя с помощью /clr:pure, что делает глобальные переменные на домен приложения по умолчанию. Параметр компилятора /clr:pure не рекомендуется использовать в Visual Studio 2015 и не поддерживается в Visual Studio 2017.
Дополнительные сведения см. в разделе "Домены приложений" и "Домены приложений" и 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