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 8 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é