Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
CA1417: Jangan gunakan
| Properti | Nilai |
|---|---|
| ID Aturan | CA1417 |
| Judul | Jangan gunakan OutAttribute pada parameter string untuk P/Invokes |
| Kategori | Interoperabilitas |
| Perbaikan bersifat merusak atau tidak merusak | Tidak terputus |
| Diaktifkan secara default di .NET 10 | Sebagai peringatan |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Parameter string P/Invoke dikirimkan berdasarkan nilai dan ditandai dengan OutAttribute.
Deskripsi aturan
Runtime .NET secara otomatis melakukan penginternan string. Jika string yang disimpan secara internal yang ditandai dengan OutAttribute diteruskan dengan nilai ke P/Invoke, runtime bisa menjadi tidak stabil.
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 mengabaikan peringatan dari aturan ini.