Bagikan melalui


Compiler Warning (level 3) C4398

'variabel' : objek global per proses mungkin tidak berfungsi dengan benar dengan beberapa appdomain; pertimbangkan untuk menggunakan __declspec(appdomain)

Keterangan

Fungsi virtual dengan konvensi panggilan __clrcall dalam jenis asli menyebabkan pembuatan vtable domain per aplikasi. Variabel seperti itu mungkin tidak benar ketika digunakan di beberapa domain aplikasi.

Anda dapat mengatasi peringatan ini dengan secara eksplisit menandai variabel __declspec(appdomain). Dalam versi Visual Studio sebelum Visual Studio 2017, Anda dapat mengatasi peringatan ini dengan mengkompilasi dengan /clr:pure, yang membuat variabel global per appdomain secara default. Opsi kompilator /clr:pure tidak digunakan lagi di Visual Studio 2015 dan tidak didukung di Visual Studio 2017.

Untuk informasi selengkapnya, lihat appdomain dan Domain Aplikasi dan Visual C++.

Contoh

Sampel berikut menghasilkan 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