编译器警告(等级 3)C4398

“variable”:per-process 全局对象可能无法与多个 appdomain 一起正常工作;请考虑使用 __declspec(appdomain)

备注

在本机类型中具有 __clrcall 调用约定的虚函数会导致创建每个应用程序域的 vtable。 当在多个应用程序域中使用时,此类变量可能无法正确更正。

可通过显式标记变量 __declspec(appdomain) 来解决此警告。 在低于 Visual Studio 2017 的 Visual Studio 版本中,可通过使用 /clr:pure 进行编译来解决此警告,这将默认为每个 appdomain 生成全局变量。 “/clr:pure”编译器选项在 Visual Studio 2015 中已弃用,在 Visual Studio 2017 中不受支持

有关详细信息,请参阅 appdomain应用程序域和 Visual C++

示例

下面的示例生成 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