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


Предупреждение компилятора (уровень 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