Dela via


CA1417: Använd OutAttribute inte på strängparametrar för P/Invokes

Egenskap Värde
Regel-ID CA1417
Title Använd inte OutAttribute på strängparametrar för P/Invokes
Kategori Samverkan
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 Som varning
Tillämpliga språk C# och Visual Basic

Orsak

En P/Invoke-strängparameter skickas som en värdereferens och markeras med OutAttribute.

Regelbeskrivning

.NET-körningen utför automatiskt stränginternering. Om en intern sträng som markerats med OutAttribute skickas som ett värde till en P/Invoke kan körningen destabiliseras.

Så här åtgärdar du överträdelser

Om det krävs att ändrad strängdata samlas tillbaka till anroparen skickar du strängen med referens i stället. Annars OutAttribute kan tas bort utan några andra ändringar.

 // 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);

När du ska ignorera varningar

Det är inte säkert att ignorera en varning från den här regeln.

Se även