CA1417: Nepoužívejte OutAttribute
u parametrů řetězce pro volání nespravovaného kódu
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1417 |
Název | Nepoužívejte OutAttribute u parametrů řetězce pro volání nespravovaného kódu. |
Kategorie | Vzájemná funkční spolupráce |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako upozornění |
Příčina
Řetězcový parametr P/Invoke je předán hodnotou a označen znakem OutAttribute.
Popis pravidla
Modul runtime .NET automaticky provádí prokládání řetězců. Pokud je provládaný řetězec označený OutAttribute hodnotou P/Invoke, je možné modul runtime synchronizovat.
Jak opravit porušení
Pokud je vyžadováno zařazování upravených řetězcových dat zpět volajícímu, předejte ho odkazem. V opačném případě je možné ji OutAttribute odebrat bez jakýchkoli dalších změn.
// 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);
Kdy potlačit upozornění
Není bezpečné potlačit upozornění z tohoto pravidla.
Viz také
Spolupracujte s námi na GitHubu
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.