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