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
Berkolaborasi dengan kami di GitHub
Sumber untuk konten ini dapat ditemukan di GitHub, yang juga dapat Anda gunakan untuk membuat dan meninjau masalah dan menarik permintaan. Untuk informasi selengkapnya, lihat panduan kontributor kami.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk