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 řetězcových parametrů pro P/Invoke volání. |
| Kategorie | Vzájemná funkční spolupráce |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Jako upozornění |
| Příslušné jazyky | C# a Visual Basic |
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 interovaný řetězec označený OutAttribute předán podle hodnoty funkci P/Invoke, může to destabilizovat modul runtime.
Jak opravit porušení
Pokud je potřeba přenést upravená řetězcová data zpět volajícímu, předejte řetězec jako odkaz. V opačném případě lze 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.