Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
CA1417: Nepoužívejte
| 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 10 | 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.