Partilhar via


Aviso do compilador (nível 3) C4398

'variable': um objeto global por processo pode não funcionar corretamente com múltiplos domínios de aplicativo; considere o uso de __declspec(appdomain)

Comentários

Uma função virtual com a convenção de chamada __clrcall em um tipo nativo causa a criação de uma vtable por domínio de aplicativo. Essa variável pode não ser corrigida de maneira adequada quando usada em vários domínios de aplicativo.

Você pode resolver esse aviso marcando explicitamente a variável __declspec(appdomain). Em versões do Visual Studio anteriores ao Visual Studio 2017, você pode resolver esse aviso compilando com /clr:pure, o que torna variáveis globais por domínio de aplicativo por padrão. A opção do compilador /clr:pure foi preterida no Visual Studio 2015 e está sem suporte no Visual Studio 2017.

Para obter mais informações, confira appdomain e Domínios de aplicativo e Visual C++.

Exemplo

O exemplo a seguir gera o erro 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