Avertissement du compilateur (niveau 3) C4398

'variable' : l’objet global par processus peut ne pas fonctionner correctement avec plusieurs domaines d’application ; envisagez d’utiliser __declspec(appdomain)

Notes

Une fonction virtuelle avec __clrcall convention d’appel dans un type natif entraîne la création d’une table virtuelle par domaine d’application. Une telle variable peut ne pas être correcte lorsqu’elle est utilisée dans plusieurs domaines d’application.

Vous pouvez résoudre cet avertissement en marquant explicitement la variable __declspec(appdomain). Dans les versions de Visual Studio avant Visual Studio 2017, vous pouvez résoudre cet avertissement en compilant avec /clr :pure, ce qui rend les variables globales par domaine d’application par défaut. L’option /clr :pure compiler est déconseillée dans Visual Studio 2015 et non prise en charge dans Visual Studio 2017.

Pour plus d’informations, consultez appdomain et Domaines d’application et Visual C++.

Exemple

L’exemple suivant génère l’erreur 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