CA1417: Använd OutAttribute
inte på strängparametrar för P/Invokes
Property | Värde |
---|---|
Regel-ID | CA1417 |
Title | Använd inte OutAttribute på strängparametrar för P/Invokes |
Kategori | Samverkan |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som varning |
Orsak
En P/Invoke-strängparameter skickas av värdet och markeras med OutAttribute.
Regelbeskrivning
.NET-körningen utför automatiskt strängpraktik. Om en intern sträng som markerats med OutAttribute skickas av 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
Samarbeta med oss på GitHub
Källan för det här innehållet finns på GitHub, där du även kan skapa och granska ärenden och pull-begäranden. Se vår deltagarguide för mer information.