编译器警告(等级 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