Freigeben über


Compilerwarnung (Ebene 3) C4398

'Variable': Globales Objekt pro Prozess funktioniert möglicherweise nicht ordnungsgemäß mit mehreren App-Domänen. Erwägen Sie die Verwendung von __declspec(appdomain)

Hinweise

Eine virtuelle Funktion mit __clrcall Aufrufkonvention in einem systemeigenen Typ bewirkt die Erstellung einer pro Anwendungsdomäne vtable. Eine solche Variable stimmt möglicherweise nicht ordnungsgemäß, wenn sie in mehreren Anwendungsdomänen verwendet wird.

Sie können diese Warnung beheben, indem Sie die Variable __declspec(appdomain)explizit markieren. In Versionen von Visual Studio vor Visual Studio 2017 können Sie diese Warnung beheben, indem Sie mit "/clr:pure" kompilieren, wodurch standardmäßig globale Variablen pro App-Domäne erstellt werden. Die Option "/clr:pure compiler" ist in Visual Studio 2015 veraltet und wird in Visual Studio 2017 nicht unterstützt.

Weitere Informationen finden Sie unter "appdomain " und "Application Domains" und "Visual C++".

Beispiel

Im folgenden Beispiel wird C4398 generiert.

// 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