Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 3) C4398

"zmienna" : obiekt globalny procesu może nie działać poprawnie z wieloma domenami aplikacji; rozważ użycie __declspec (appdomain)

Uwagi

Funkcja wirtualna z __clrcall konwencją wywoływania w typie natywnym powoduje utworzenie tabeli wirtualnej dla domeny aplikacji. Taka zmienna może nie być poprawna poprawnie, jeśli jest używana w wielu domenach aplikacji.

To ostrzeżenie można rozwiązać, jawnie oznaczając zmienną __declspec(appdomain). W wersjach programu Visual Studio przed programem Visual Studio 2017 można rozwiązać to ostrzeżenie, kompilując element /clr:pure, co sprawia, że zmienne globalne na domenę aplikacji domyślnie. Opcja /clr:pure compiler jest przestarzała w programie Visual Studio 2015 i nieobsługiwana w programie Visual Studio 2017.

Aby uzyskać więcej informacji, zobacz appdomain i application domains and Visual C++.

Przykład

Poniższy przykład generuje kod 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