Bagikan melalui


CA1417: Jangan gunakan OutAttribute pada parameter string untuk P/Invokes

Properti Nilai
ID Aturan CA1417
Judul Jangan gunakan OutAttribute pada parameter string untuk P/Invokes
Golongan Interoperabilitas
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai peringatan

Penyebab

Parameter string P/Invoke diteruskan oleh nilai dan ditandai dengan OutAttribute.

Deskripsi aturan

Runtime .NET secara otomatis melakukan interning string. Jika string magang yang ditandai dengan OutAttribute diteruskan oleh nilai ke P/Invoke, runtime dapat didestabilisasi.

Cara memperbaiki pelanggaran

Jika marshalling data string yang dimodifikasi kembali ke pemanggil diperlukan, berikan string berdasarkan referensi sebagai gantinya. Jika tidak, OutAttribute dapat dihapus tanpa perubahan lain.

 // Violation
[DllImport("MyLibrary")]
private static extern void Foo([Out] string s);

// Fixed: passed by reference
[DllImport("MyLibrary")]
private static extern void Foo(out string s);

// Fixed: marshalling data back to caller is not required
[DllImport("MyLibrary")]
private static extern void Foo(string s);

Kapan harus menekan peringatan

Tidak aman untuk menekan peringatan dari aturan ini.

Baca juga