Compartir a través de


Advertencia del compilador (nivel 3) C4398

"variable": es posible que el objeto global por proceso no funcione correctamente con varios appdomains; considere la posibilidad de usar __declspec(appdomain)

Comentarios

Una función virtual con una convención de llamada __clrcall en un tipo nativo provoca la creación de una instancia de vtable de dominio de aplicación. Esta variable puede no corregirse correctamente cuando se usa en varios dominios de aplicación.

Puede resolver esta advertencia marcando explícitamente la variable __declspec(appdomain). En versiones de Visual Studio anteriores a Visual Studio 2017, puede resolver esta advertencia compilando con /clr:pure, que convierte las variables globales por appdomain de forma predeterminada. La opción del compilador /clr:pure está en desuso en Visual Studio 2015 y no se admite en Visual Studio 2017.

Para más información, consulte appdomain y Dominios de aplicación y Visual C++.

Ejemplo

El ejemplo siguiente genera 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