Upozornění kompilátoru (úroveň 3) C4398
Proměnná: Globální objekt pro jednotlivé procesy nemusí správně fungovat s více doménami appdomain; zvažte použití __declspec(appdomain).
Poznámky
Virtuální funkce s __clrcall konvencí volání v nativním typu způsobí vytvoření virtuální tabulky pro každou doménu aplikace. Taková proměnná nemusí být správně správná při použití v několika doménách aplikace.
Toto upozornění můžete vyřešit explicitním označením proměnné __declspec(appdomain)
. Ve verzích sady Visual Studio před sadou Visual Studio 2017 můžete toto upozornění vyřešit kompilací pomocí /clr:pure, což ve výchozím nastavení zpřístupňuje globální proměnné na doménu aplikace. Možnost /clr:pure compiler je v sadě Visual Studio 2015 zastaralá a v sadě Visual Studio 2017 není podporována.
Další informace najdete v tématu appdomain a aplikační domény a Visual C++.
Příklad
Následující ukázka vygeneruje 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